2011-05-20 69 views
0

在我的應用程序相關聯的最佳/最有效的方式,我有以下情況:軌道 - 什麼是這些模型

用戶belongs_to的集團 集團的has_many用戶

項目belongs_to的用戶 用戶的has_many項目

以下情況也是如此: - 每個組將有一個BaseCase - 每個項目將有多個方案和一個BaseCase(取決於項目用戶所屬的組) - Scen ARIO和BaseCase是同一類型的對象(我們稱之爲數據) 的 - 每個場景的默認值是該組的BaseCase值,但用戶可以更改這些默認值來創建特定的場景

我不知道如何有效地通過關聯捕捉所有這些關係,有沒有人有任何想法?感謝

回答

0

如果我理解正確的話,那麼這樣的事情

class User 
    belongs_to :group 
    has_many :projects 
end 

class Group 
    has_many :users 
    has_many :projects, :through => :users 
    has_one :base_case 
end 

class Project 
    has_many :scenarios 
    has_one :base_case 
    belongs_to :user 
    has_one :group, :through => user 
    has_one :base_case, :through => :group 
end 

class Scenario 
    belongs_to :project 
    has_one :base_case, :through => :project 

    before_create do 
    self.attributes = self.base_case.attributes.except(:group_id, ...) 
    end 
end 

class BaseCase 
    belongs_to :group 
end 
+0

這是非常有用的感謝,請問self.attributes設置的默認值的情況下?如果沒有包含':through =>:xxx'的行,這也可以工作嗎?謝謝 – Zakoff 2011-05-21 13:04:08

+0

1.是的,self.attributes = self.base_case.attributes.except(:group_id,...)從base_case設置默認值 2.不需要,:through =>:xxx是必需的。它是這樣生成SQL查詢:'select * from場景s內部連接項目p上p.id = s.project_id內部連接組...內部連接base_cases b上b.group_id = g.id' – Anton 2011-05-21 17:38:40

+0

感謝您採取有時間回答,不幸的是我沒有代表你的投票權,但我已經接受了答案 – Zakoff 2011-05-21 18:04:12