2016-05-08 13 views
0

Ich erhalte einen ActiveRecord :: AssociationTypeMismatch Fehler beim Versuch, einen Datensatz zu übermitteln.Ruby on Rails: ActiveRecord :: AssociationTypeMismatch

Gegenstand (# 88982676) erwartet, bekam String (# 20223000)

Ausblick:

<%= f.collection_select :subject, Subject.order(:subject), :subject, :subject, {prompt: "Select a subject"}, {class: "form-control"} %> 

Controller:

def create 
      @homework = current_user.homeworks.build(homework_params) 
      if @homework.save 
       redirect_to homeworks_path 
      else 
       render 'new' 
      end 
     end 
... 

def homework_params 
      params.require(:homework).permit(:subject, :description, :date, :completed_at) 
     end 

Modell: Homework.rb

class Homework < ActiveRecord::Base 

validates :subject, presence:true 

    belongs_to :subject 

def completed? 
    !completed_at.blank? 
end 


end 

Subject.rb

class Subject < ActiveRecord::Base 

    has_many :homeworks 

    def to_s 
    subject 
    end 
end 

Diese Anwendung zu arbeiten, aber tut plötzlich nicht mehr. Ich habe den Namen der Tabelle in "Betreff" geändert und die Ansichten und den Controller entsprechend geändert. Es scheint jetzt nach ID zu suchen? Betreff ist eine Zeichenfolge. Irgendein Rat? Vielen Dank.

Antwort

1

Nach Ihren Assoziationsmodellen, sollten Sie Ihre Hausaufgaben Attribute wie folgt aussehen:

subject_id:integer description:string date:datetime completed_at:datetime

Daher sollten Sie subject_id erlauben, statt subject in Ihrem homework_params

Was collection_select Verfahren ist es sollte in etwa so aussehen:

f.collection_select :subject_id, Subject.order(:subject), :id, :subject