如何通过接受嵌套属性的多对多关系创建新记录?

OrganizationUser通过Relationship进行多对多关联。 最初我实现了这个1对多的关联,但是现在我需要通过关联来成为多对多关系。 所以我创建了Relationship模型并更改了模型文件中的关联。

Organization接受User嵌套属性,就像在我的应用程序中一样,我有两个连接的注册表单。 另外,我在我的种子文件中使用它:

 Organization.create!(name: "name", ...).users.create(email: "email@email.com", ...) 

这是一个1对多的关联,但现在它是一个多对多的通过关联,它产生播种错误:

 Validation failed: Member can't be blank, Moderator can't be blank 

这指的是Relationship模型的变量, UserOrganization通过该变量关联。

导致此错误的原因; 为什么这些值是空白的? 对于多对多关联, Organization.create行可能不正确吗? membermoderator具有默认值(请参阅迁移文件)。 我希望它能用默认值创建organizationuserrelationship 。 我还应该如何创建新的组织和用户?


组织模式:

 has_many :relationships, dependent: :destroy has_many :users, through: :relationships accepts_nested_attributes_for :relationships, :reject_if => :all_blank, :allow_destroy => true validates_associated :users 

关系模型:

 belongs_to :organization belongs_to :user accepts_nested_attributes_for :user validates_presence_of :organization validates_presence_of :user validates :member, presence: true validates :moderator, presence: true 

用户模型:

 has_many :relationships, dependent: :destroy has_many :organizations, through: :relationships, inverse_of: :users 

关系迁移:

 class CreateRelationships < ActiveRecord::Migration def change create_table :relationships do |t| t.belongs_to :user, index: true t.belongs_to :organization, index: true t.boolean :member, null: false, default: false t.boolean :moderator, null: false, default: false t.timestamps null: false end add_index :relationships, [:user_id, :organization_id], unique: true end end 

我认为您的问题可能是您没有为用户模型中的has_many关系指定“外键”。 尝试:

 has_many :relationships, foreign_key: "organization_id", dependent: :destroy 

这可以唯一地标识与您的用户模型的每个关系的组织。