2017-10-04 128 views
0

我有以下型號及其協會如下需要實現共享相同的功能的軌道協會

class Region < ActiveRecord::Base 

    belongs_to :company 
    has_many :branches 

    validates :region_name, presence: true 
end 

class Branch < ActiveRecord::Base 
    belongs_to :region 

    validates :branch_name, presence: true 
    validates :branch_name, uniqueness: true 
end 

class Service < ActiveRecord::Base 
    belongs_to :company 
end 

class Company < ActiveRecord::Base 
    has_many :regions 
    has_many :services 

    validates :name, presence: true 
    validates :name, uniqueness: true 

    after_save :toggle_services, if: :status_changed? 

    def toggle_services 
    self.services.each do |service| 
     service.update_attributes!(status: self.status) 
    end 
    end 
end 

,公司可以有多個區域和分支機構。有一種情況,在一家擁有多家分支機構的公司將會共享公司提供的相同服務。這種情況將如何實施。

+0

我不完全得到了這個問題。看起來分支機構總是能夠獲得公司提供的所有服務,因爲公司的服務是否與分支機構共享尚無區別。或者正在模擬我剛剛描述的缺乏具體解決方案的問題? – ulferts

+0

讓我們以銀行爲例,就像銀行有多個分行,但通常他們在每個分行都提供相同的服務,所以應該如何在模型層面完成這個工作,有沒有辦法通過關聯來實現。 – Nikhil

回答

1

如果你想重用每ServiceCompany報價,你可以簡單地寫一個方法來訪問它們:

class Branch < ActiveRecord::Base 
    belongs_to :region 

    ... 

    def services 
    region.company.services 
    end 
end 

我會從具有直接關聯避免(在軌檢測)到服務,因爲這將允許Branch實例更改(添加/刪除)公司提供的服務。

但是我CompanyBranch之間添加關聯的區域看起來是一個簡單的連接表和具有該協會將美化代碼:

class Branch < ActiveRecord::Base 
    belongs_to :region 
    belongs_to :company, through: :region 

    ... 

    delegate :services, 
      to: :company 
end 

class Company < ActiveRecord::Base 
    has_many :regions 
    has_many :branches, through: :regions 
    ... 
end