Ruby 在 Rails 上:ActiveRecord::AssociationTypeMismatch
Ruby on Rails: ActiveRecord::AssociationTypeMismatch
我在尝试提交记录时遇到 ActiveRecord::AssociationTypeMismatch 错误。
Subject(#88982676) expected, got String(#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
以前可以用,但突然不行了。我确实将 table 的名称更改为 "subject" 并相应地更改了视图和控制器。现在好像在找id?主题是一个字符串。有什么建议吗?谢谢。
根据你的关联模型,你的作业属性应该是这样的:
subject_id:integer description:string date:datetime completed_at:datetime
因此,您应该在 homework_params
中允许 subject_id
,而不是 subject
至于collection_select方法,应该是这样的:
f.collection_select :subject_id, Subject.order(:subject), :id, :subject
我在尝试提交记录时遇到 ActiveRecord::AssociationTypeMismatch 错误。
Subject(#88982676) expected, got String(#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
以前可以用,但突然不行了。我确实将 table 的名称更改为 "subject" 并相应地更改了视图和控制器。现在好像在找id?主题是一个字符串。有什么建议吗?谢谢。
根据你的关联模型,你的作业属性应该是这样的:
subject_id:integer description:string date:datetime completed_at:datetime
因此,您应该在 homework_params
subject_id
,而不是 subject
至于collection_select方法,应该是这样的:
f.collection_select :subject_id, Subject.order(:subject), :id, :subject