2017-02-13 3 views
0

Ich habe eine einfache create action in meinem courses_controller. Ich bin mit dem current_user.built Befehl dem ObjektDevise current_user Formularübergabe "Benutzer kann nicht leer sein"

courses_controller.rb

class CoursesController < ApplicationController 
    before_action :authenticate_user!, expect: [:index, :show] 
    before_action :set_course, only: [:show, :edit, :update, :destroy] 


    # GET /courses/new 
    def new 
    @course = current_user.courses.build 
    end 





    # POST /courses 
    # POST /courses.json 
    def create 
    @course = current_user.courses.build(course_params) 
    respond_to do |format| 
     if @course.save 
     format.html { redirect_to @course, notice: 'Course was successfully created.' } 
     format.json { render :show, status: :created, location: @course } 
     else 
     format.html { render :new } 
     format.json { render json: @course.errors, status: :unprocessable_entity } 
     end 
    end 
    end 





    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_course 
     @course = Course.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def course_params 
     params.require(:course).permit(:name, :description, :user_id) 
    end 
end 

erstellen Wenn Sie einen neuen Kurs im Browser erstellen ich folgende Fehlermeldung erhalten:

1 Fehler verboten diesen Kurs aus werden gespeichert: Benutzer kann nicht leer sein

Dies ist die Form Ansicht:

<%= form_for(@course) do |f| %> 
    <% if @course.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@course.errors.count, "error") %> prohibited this course from being saved:</h2> 

     <ul> 
     <% @course.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :description %><br> 
    <%= f.text_area :description %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

Irgendwelche Ideen, was könnte das Problem hier sein? Einfallsreichtum und die current_user Methode arbeiten gut in der Konsole und auf anderen Modellen

Antwort

1

In Ihrem Controller, wobei das Verfahren course_params sollten nicht zulassen, user_id in den Parametern übergeben werden, wenn Sie einen Benutzer möchten einen Kurs für einen anderen Benutzer zu erstellen. Da Sie den Kurs vom aktuellen Benutzer erstellen, wird er nicht benötigt.

Überprüfen Sie außerdem, ob Ihr Kursmodell eine Validierung der Anwesenheit für den Benutzer und nicht der Benutzer-ID aufweist.

+0

Vielen Dank für Ihre Antwort. Es ist eine Beziehung zwischen Benutzer und Kurse, deshalb muss ich die user_id übergeben. Aber Ihr Tipp bezüglich der Validation von: user und not: user_id hat den Trick gemacht. Vielen Dank! – Jan

Verwandte Themen