我在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")
如何实现这一目标?
答案 0 :(得分:1)
您可以将属性传递给build
方法,并且它们会自动设置在正在构建的新记录上:
假设您有一个现有公司@company
,并且您想以所有者角色向公司添加@user
:
user_company = @user.user_companies.build(company: @company, company_role: "owner")
如果是公司has_many :user_companies
,您也可以这样做,从公司开始:
user_company = @company.user_companies.build(user: @user, company_role: "owner")
您可以在Rails documentation中找到有关关联和构建记录的更多详细信息。
答案 1 :(得分:1)
设置第一个用户非常简单:
current_user
如果您希望@company
与UserCompany
相关联,则只需创建另一个UserCompany.create(
user: current_user,
company: @company,
company_role: "some other role"
)
:
@company.users
然后,如果您查询id | name
1 | admin
2 | new user
,您将获得:
@company.user_companies
当您查询id | user_id | company_id | company_role
1 | 2 | 1 | "owner"
2 | 1 | 1 | "some other role"
时,您将获得:
{{1}}