如何对多个人使用create方法:很多通过关系

时间:2015-07-31 13:22:45

标签: ruby-on-rails ruby ruby-on-rails-4 associations

UserOrganization通过Relationship进行多对多关联。

Relationship模型除其他外,指定User是否是Organizationmember布尔值)的成员。

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

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

但是,这还没有将member模型中的Relationship布尔值设置为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)

1 个答案:

答案 0 :(得分:1)

如果拆分创建行,则可以避免使用某些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来实现这一点,但在这种情况下,看起来这种方法会更复杂。

此链接描述了设置类似的内容,但它与many-to-one关系:https://stackoverflow.com/a/25941676/3993528