如何使用 many:many through 关系的创建方法
How to use the create method for a many:many through relationship
User
和 Organization
通过 Relationship
有一个多对多的关联。
Relationship
模型指定 User
是否是 Organization
的成员(member
布尔值)。
如果需要创建新的 Organization
以及与之相关的新 User
Organization
,我目前执行以下操作:
Organization.create!(name: "name", ...).users.create(email: "email@email.com",...)
但是,这还没有将 Relationship
模型中的 member
布尔值设置为 true
。
有没有办法在上面的命令中包含这个?或者这是否只能与创建 user
和 organization
记录分开?因为那样的话它需要相对较多的代码,并且在前一个 create
行之后添加似乎有点低效:
@user = User.find_by(username: username)
@organization = Organization.find_by(name: name)
@relationship = @organization.relationships.find(@user)
@relationship.update_attributes(member: true)
如果你拆分你的创建行,你可以避免一些find
方法:
org = Organization.create!(name: "name", ...)
user = org.users.create(email: "email@email.com", ...)
Relationship.find_by(organization_id: org, user_id: user).update_attributes(member: true)
我试着看看是否有一种简单的方法可以使用 accepts_nested_attributes_for
来实现这一点,但在这种情况下,这种方法看起来会更复杂。
这个link描述了类似的设置,但是它与many-to-one
关系:
User
和 Organization
通过 Relationship
有一个多对多的关联。
Relationship
模型指定 User
是否是 Organization
的成员(member
布尔值)。
如果需要创建新的 Organization
以及与之相关的新 User
Organization
,我目前执行以下操作:
Organization.create!(name: "name", ...).users.create(email: "email@email.com",...)
但是,这还没有将 Relationship
模型中的 member
布尔值设置为 true
。
有没有办法在上面的命令中包含这个?或者这是否只能与创建 user
和 organization
记录分开?因为那样的话它需要相对较多的代码,并且在前一个 create
行之后添加似乎有点低效:
@user = User.find_by(username: username)
@organization = Organization.find_by(name: name)
@relationship = @organization.relationships.find(@user)
@relationship.update_attributes(member: true)
如果你拆分你的创建行,你可以避免一些find
方法:
org = Organization.create!(name: "name", ...)
user = org.users.create(email: "email@email.com", ...)
Relationship.find_by(organization_id: org, user_id: user).update_attributes(member: true)
我试着看看是否有一种简单的方法可以使用 accepts_nested_attributes_for
来实现这一点,但在这种情况下,这种方法看起来会更复杂。
这个link描述了类似的设置,但是它与many-to-one
关系: