0

这是我正在尝试做的事情:

class Account < ActiveRecord::Base
   def name
   end
end

class TypeA < Account
end

class TypeB < Account
end

其中 TypeA 和 TypeB 存储在两个不同的表中,而 Account 几乎充当抽象接口(没有关联的表)。它们都有大量的条目和大量的字段,所以我想让它们分开。有没有办法解决这个问题?

(上面的示例不能用作帐户表,顺便说一句)。

更新

现在,如果我使用模块(如答案中所建议的那样),则会引发另一个问题:

假设我有

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

其中 account 可以是TypeATypeB。我得到以下不当行为:

i = TypeA.new(:name => "Test")
t = Transaction.new(:account => i)
t.account.name
>> nil

这不是我想要的,account.name应该返回“测试”。如何得到这个?

4

1 回答 1

1

改用模块。您已在要共享的这两个模型之间共享行为。这是模块的一个很好的用例。

# inside lib/account.rb
module Account
   # ...
   def name
     # code here
   end
   # ...
end

# inside app/models/type_a.rb
class TypeA < ActiveRecord::Base
  include Account
end

# inside app/models/type_b.rb
class TypeB < ActiveRecord::Base
  include Account
end
于 2012-10-26T09:02:11.600 回答