Organization
和User
通过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
模型的变量,User
和Organization
与之相关联。
导致此错误的原因;为什么这些值是空白的?对于多对多关联,Organization.create
行可能不正确吗? member
和moderator
具有默认值(请参阅迁移文件)。我希望它能够使用默认值创建organization
,user
和relationship
。我还应该如何创建新的组织和用户?
组织模式:
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
答案 0 :(得分:1)
我认为你的问题可能是你没有指定一个&#34;外键&#34;用户模型中的has_many关系。试试:
has_many :relationships, foreign_key: "organization_id", dependent: :destroy
这可以唯一地标识与您的用户模型的每个关系的组织。