0

我有一个条目表,每个条目可以有不同的帐户类型。我正在尝试根据的值定义并返回帐户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名字。任何人都可以弄清楚我想要什么?很难用英语解释。

泰尔

4

2 回答 2

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
于 2010-09-09T13:37:22.890 回答
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
于 2010-09-09T13:12:01.280 回答