2010-09-09 100 views
0

我有一个包含条目的表,每个条目可以有不同的帐户类型。我试图根据cindofBelongs_to根据字段的值

的值来定义并返回帐户。每个帐户类型都有一个表,account_siteaccount_page。所以经常belongs_to不会。

那么,有没有办法返回类似:

belongs_to :account, :class_name => "AccountSite", :foreign_key => "account_id" if cindof = 1 
belongs_to :account, :class_name => "AccountPage", :foreign_key => "account_id" if cindof = 2 

尝试过这样做的方法allso,但没有运气。真的想要只有一个account而不是不同的名字belongs_to。 任何人都可以弄清楚我想要什么?很难用英语解释。

Terw

回答

2

你应该能够做你想要的多态关联。默认情况下,这不会开启cindof,但这可能不成问题。

class ObjectWithAccount < ActiveRecord::Base 
    belongs_to :account, :polymorphic => true 
end 

class AccountSite < ActiveRecord::Base 
    has_many :objects_with_accounts, 
     :as => :account, 
     :class_name => 'ObjectWithAccount' 
end 

class AccountPage < ActiveRecord::Base 
    has_many :objects_with_accounts, 
     :as => :account, 
     :class_name => 'ObjectWithAccount' 
end 

您将需要一个两列account_idaccount_type列。帐户对象的类型然后存储在额外的类型列中。

这将让你做的事:

obj.account = AccountPage.new 

obj.account = AccountSite.new