2016-05-08 2 views
0

Я получаю ошибку ActiveRecord :: AssociationTypeMismatch при попытке отправить запись.Ruby on Rails: ActiveRecord :: AssociationTypeMismatch

Тема (# 88982676) ожидается, получил Струнный (# 20223000)

Вид:

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

Контроллер:

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 

Модель: 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 

Это использование для работы, но вдруг не делает. Я изменил название таблицы на «subject» и соответственно изменил представления и контроллер. Кажется, он ищет идентификатор сейчас? Тема - это строка. Любой совет? Благодарю.

ответ

1

Согласно вашей модели ассоциации, ваши атрибуты домашнего задания должны выглядеть следующим образом:

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

Таким образом, вы должны разрешить subject_id, вместо subject в вашем homework_params

Что касается методы collection_select, он должно быть примерно таким:

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

Смежные вопросы