0

これが私がやろうとしていることです:

class Account < ActiveRecord::Base
   def name
   end
end

class TypeA < Account
end

class TypeB < Account
end

TypeA と TypeB は 2 つの異なるテーブルに格納され、Account は抽象インターフェイスとして機能します (関連付けられたテーブルはありません)。どちらも多数のエントリと多数のフィールドを持っているため、それらを分離したままにします。これに行く方法はありますか?

(上記の例は、アカウントのテーブルが想定されているため機能しません)。

アップデート

ここで、(回答で提案されているように) モジュールを使用すると、別の問題が発生します。

私が持っているとしましょう

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

account はTypeAまたはTypeBです。次の不正行為が発生します。

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

account.name「テスト」を返す必要があるため、これは私が望むものではありません。これを入手する方法は?

4

1 に答える 1

1

Use module instead. You have shared behavior between those two models that you want to share. That's a great use-case for modules.

# 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 に答える