【发布时间】:2016-02-03 22:09:37
【问题描述】:
User 和 Company 之间存在多对多关系,模型 UserCompany 加入了这些关系。当我建立一个新用户的时候,我也建立了一个公司,使用我的users_controller,如下:
class UsersController < ApplicationController
def new
@user=User.new
@company=@user.user_companies.build.build_company
end
def create
@user = User.new(user_params)
if @user.save
# @user.companies << @company
redirect_to users_admin_path(@user), notice: "User successfuly created!"
else
redirect_to welcome_index_path
end
end
end
上面的代码构建并保存了一个新用户和该用户拥有的新公司,从而在 user_companies 数据库中创建了一个新条目。
问题:我想知道如何将第二个条目添加到此联接模型中,以供第二个已经存在的用户(称他为@user2)使用。所以我希望创建一个新对象@user2.user_companies 并在控制器中设置其属性(:user_id、:company_id 和:company_role)。也许是这样的:
UserCompany.new(company_id: @company.id, user_id: "2", company_role:"owner")
这如何实现?
【问题讨论】:
-
也许您对 M2M 连接表(和模型)的作用有些困惑?
user_companies表用作单个用户和公司之间的链接。所以不会有两个用户拥有相同的 UserCompany。 -
-
您可以破解它并添加另一个与
UserCompany的关系,但这很可能不是您真正想要的。 -
@max 是的!就是这样! (第二条评论)当我创建新用户时,如何在连接表中为已经存在的用户创建第二行?
-
你的问题没有真正的意义。如果您执行
@user = User.create; @user2 = User.create,它将在users表中插入两个不同的行。如果您执行@user.companies << @company; @user2.companies << @company,您会看到它将在user_companies中插入两个不同的行,它们都指向相同的company_id 但不同的user_id。
标签: ruby-on-rails ruby-on-rails-4 inner-join rails-activerecord