2012-05-30 48 views
0

我有兩個型號Rails模型與類型如何建模?

商業和代表

當一個企業或代表簽約它們被顯示爲選項列表,「你怎麼知道我們的?」

發現方式是動態的,因此管理員可以添加業務或代表可以發現我們的方式。例如,管理員可以添加選項「通過Google」,「通過朋友」,「通過另一位代表」等。每種發現類型可以是商業或代表或兩者兼而有之。

我應該如何discovery_type模型建模,它應該有什麼關係,我是大意如下

Schema : 
table: discovery_types 
name: string 
type: string(can be one of 'business','representative', 'both') 

class DiscoveryType< ActiveRecord::Base 
    has_many :businesses 
    has_many :representatives 
end 

class Business< ActiveRecord::Base 
    belongs_to :discovery_type 
end 

class Representative< ActiveRecord::Base 
    belongs_to :discovery_type 
end 

思考一些事情,我只是不相信這上面的方案。所以任何人都可以指出任何問題,並可能會提出更好的出路..

也應該在任何列上添加索引?

回答

1

編輯:不是多形性協會,你是對的 - 那是相反的關係。

這應該爲你想要的工作關係 -

class DiscoveryType< ActiveRecord::Base 
    has_many :discoveries 
end 

class Discovery < ActiveRecord::Base 
    belongs_to :discovery_type 
end 

class Business < Discovery 
end 

class Representative < Discovery 
end 

如果您在discovery_types Rails的離開type列應自動使用它

+0

我不這麼認爲。在多態的情況下,你有一個模型,可以屬於多態的多個模型,但在這裏它是相反的我有兩個模型都屬於一個模型...你能詳細說明如何使用多態關聯來建模? – Abid

+0

但在這種模式的業務有很多發現類型..業務將有一個發現類型和發現類型需要有很多業務..我想有像這樣的查詢 例如 'DiscoverType.first.businesses' 這會告訴我使用哪些業務發現我們「谷歌」 併爲每個企業或代表我會像 @ business.discovery_type這會告訴我這沒有企業如何發掘利用。 – Abid

+0

你是對的 - 多態關聯是你想要的關係的反向關係。我編輯了我的答案。 – Nate