2014-02-13 74 views
0

我有三種模型:主機,服務和環境。Rails - 模型之間的關聯條件

environment 
    has_many :hosts 
    has_many :services 

host 
    has_many :services 
    belongs_to :environment 

service 
    belongs_to :host 
    belongs_to :environment 

有兩個env,pre和pro。 主機和服務可以在任何環境中。

問題是我想定義一個服務,例如'pre'env,只能屬於同一個env中的主機。

我認爲這必須是財產以後像

has_many :services, :conditions => proc { "host.environment_id=service.environment_id" } 

但不知道該怎麼做。

使用Rails 4.0.2和Ruby 2.0.0p299

謝謝!

回答

0

問題是 - 該條件不會阻止您實際將記錄與錯誤關聯(即不同的environment_id)。您可以查閱文檔here。這種情況在查詢期間很重要。您需要對您的某個模型進行某種驗證。例如:

validates :same_environment 

def for_same_environment 
    host.environment_id == service.environment_id 
end 

但是,這是我以前的帖子之一link。也許你會考慮改變一下架構。