Rails 5 accepted_nested_attributes_for / has_many:through

时间:2017-11-20 22:40:28

标签: ruby-on-rails ruby postgresql ruby-on-rails-5 rails-activerecord

如何创建一个新模型,其中包含对已存在的关联(多对多,使用has_many :through)的引用?

以下是形成多对多关系的模型的相关部分:

class DietaryTagging < ApplicationRecord
  belongs_to :dietary_tag
  belongs_to :dietary_taggable, polymorphic: true
end

class DietaryTag < ApplicationRecord
  has_many :dietary_taggings

  has_many  :users,
            source: :dietary_taggable,
            source_type: "User",
            through: :dietary_taggings
end

class User < ApplicationRecord
  has_many :dietary_taggings, as: :dietary_taggable
  has_many :dietary_tags, through: :dietary_taggings
  accepts_nested_attributes_for :dietary_tags
end

如果现有DietaryTag的ID为1,则在尝试使用以下内容创建新的User时,我会收到一条错误消息{:dietary_taggings=>["is invalid"]}

User.create(email: "someone@somewhere.com", dietary_tag_ids: [1])

我可以直接使用现有用户和饮食标签创建连接模型:DietaryTagging.create(dietary_taggable: User.last, dietary_tag_id: 1)。所以,我很确定问题是我使用accepts_nested_attributes_for的方式,还是我对如何/何时应该创建连接实例的期望。

0 个答案:

没有答案