添加第二个对象以从控制器连接模型

时间:2016-02-03 22:09:37

标签: ruby-on-rails ruby-on-rails-4 inner-join rails-activerecord

我在UserCompany之间存在多对多的关系,这些关系由模型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")

如何实现这一目标?

2 个答案:

答案 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

如果您希望@companyUserCompany相关联,则只需创建另一个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}}