我有三个模型:User,Fruit,Tag
用户有很多水果,水果属于用户:一对多
水果有很多标签,标签有很多水果:多对多
当我创建新用户时,我会创建一个新水果并选择一个标签。
但是我发生错误Association :tags not found
我目前的代码是:
= simple_form_for(@user) do |f|
= f.error_notification
.form-inputs
= f.input :name
= f.simple_fields_for :fruits do |fl|
= fl.error_notification
.form-inputs
= fl.input :name
= fl.association :tags
.form-actions
= f.button :submit
user.rb
class User
has_many :fruits
end
fruit.rb
class Fruit
belongs_to :user
has_many :tagging, as: :taggable
has_many :tags, through: :tagging
end
tag.rb
class Tag
has_many :taggings
end
tagging.rb
class Tagging
belongs_to :tag
belongs_to :taggable, polymorphic: true
end
答案 0 :(得分:0)
simple_fields_for
的工作方式与fields_for Rails助手的工作方式相同。
由于您的Fruit
有很多Tags
,因此您应该使用:
= fl.simple_fields_for :tags
而不是:
= fl.association :tags
因此,您的代码应如下所示:
.form-inputs
= f.input :name
= f.simple_fields_for :fruits do |fl|
= fl.error_notification
.form-inputs
= fl.input :name
= fl.simple_fields_for :tags
.form-actions
= f.button :submit
如果要从标签列表中选择标签而不是创建新标签,可以执行以下操作:
= fl.input :tags, as: :check_boxes, checked: Tag.pluck(&:id)
答案 1 :(得分:0)
= fl.collection_select :tag_ids, Tag.all, :id, :name
代替= fl.association :tags
。
-