我有一个包含条目的表,每个条目可以有不同的帐户类型。我正在尝试根据cindof
每种帐户类型都有一个表account_site
和account_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
尝试用方法做到这一点,但没有运气。真的只想拥有一个account
而不是belongs_to
个名字。
谁能弄清楚我想要什么?很难用英语解释。
Terw
答案 0 :(得分: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_id
列和account_type
列。然后,帐户对象的类型将存储在额外类型列中。
这将允许你这样做:
obj.account = AccountPage.new
或
obj.account = AccountSite.new
答案 1 :(得分:0)
我会研究单表继承。不是100%肯定,但我认为它可以解决您的问题http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html
如果这不好,那自己实施起来并不难。
def account
case self.cindof
when 1 then AccountSite.find self.account_id
when 2 then AccountPage.find self.account_id
end
end