如何使用 many:many through 关系的创建方法

How to use the create method for a many:many through relationship

UserOrganization 通过 Relationship 有一个多对多的关联。

Relationship 模型指定 User 是否是 Organization 的成员(member 布尔值)。

如果需要创建新的 Organization 以及与之相关的新 User Organization,我目前执行以下操作:

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

但是,这还没有将 Relationship 模型中的 member 布尔值设置为 true

有没有办法在上面的命令中包含这个?或者这是否只能与创建 userorganization 记录分开?因为那样的话它需要相对较多的代码,并且在前一个 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关系: