如何通过额外的字段保存模型?

时间:2015-09-24 15:45:45

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

我有三个模型CompanyUserDivision

User有多个Division用于不同的Companies

我需要确定哪家公司拥有分部

因此,我在has_many :throughUsers

之间建立了Divisions关联

模型UsersDivision包含此字段id|user_id|division_id|company_id但是当我更新用户模型rails时删除旧记录并创建没有company_id字段的新记录如何更新模型UsersDivision并合并{ {1}}?

回调?

company_id

还是在控制器中?

class UsersDivision < ActiveRecord::Base

  after_update :set_company

  belongs_to :user
  belongs_to :division
  belongs_to :company

  validates :user_id, :division_id, presence: true

  private

  def set_company(company)
    self.company_id = company
  end
end

如何在创建UsersDivision记录时合并company_id?

1 个答案:

答案 0 :(得分:0)

  

因此,我在has_many :throughUsers

之间建立了Divisions关联

我希望有Divisions的表格,然后是CompanyDivisions的表格,然后我们就可以将用户与之相关联。

以下是我设置的方法:

#app/models/user.rb
class User < ActiveRecord::Base
   has_many :user_divisions
   has_many :divisions, through: :user_divisions
   has_many :company_divisions, through: :user_divisions
   has_many :companies, through: :company_divisions
end

#app/models/user_division.rb
class UserDivision < ActiveRecord::Base
   belongs_to :user
   belongs_to :company_division
end

#app/models/company.rb
class Company < ActiveRecord::Base
   has_many :company_divisions
   has_many :divisions, through: :company_divisions
end

#app/models/company_division.rb
class CompanyDivision < ActiveRecord::Base
    belongs_to :company
    belongs_to :division
end

#app/models/division.rb
class Division < ActiveRecord::Base
   has_many :company_divisions
   has_many :companies, through: :company_divisions
end

这非常臃肿,但应该让你能够打电话:

@user.divisions
@user.divisions.each do |division|
   division.companies.first
  

创建company_id记录

时如何合并UsersDivision

这取决于几个因素:

  
      
  1. params哈希
  2.   
  3. 您的协会如何设置
  4.   

我没有你的params哈希,但我确实有你当前的代码:

class UsersController < ApplicationController

  def update
    @company = Company.find params[:company_id]
    @user = User.find params[:id]

    redirect_to :back if @user.update user_params
  end 

  private

  def user_params
     params.require(___).permit(___).merge(company_id: @company.id)
  end
end