1

次のシナリオがありますが、クラス継承と単一テーブル継承のどちらを使用すべきかわかりません。

Class User
  has_one :main_list
  has_one :known_list
  has_many :regular_lists
end

Class List
  has_many :words
end

Class Word
  belongs_to :list
end

私がやりたいのは、それぞれの異なるリストタイプを異なるクラスにすることです。問題は、それを行う場合、オブジェクト/クラスmain_list_idknown_list_id、、を追加する必要があるということです。これは面倒なようです。私は次のようなことをすることができますか?regular_list_idWord

Class MainList
  has_many :words, :foreign_key => list_id
end

そして次のようなもの:

@user.main_list.find_by_name("MainList")

これに関する唯一の問題は、誰かがRegularList「MainList」という名前を付ける可能性があることです。

4

1 に答える 1

1

あなたはこのようなことをすることができます:

Class User < ActiveRecord::Base
   has_many :lists
end

Class List < ActiveRecord::Base
  belongs_to :user
  has_and_belongs_to_many :words
end

Class Word < ActiveRecord::Base
  has_and_belongs_to_many :lists
end

リストクラスでは、2つのブールフィールドをリストに追加できます。1つはmain_list用で、もう1つはknown_list用です。そのクラスでは、検証を追加して、各ユーザーが1つのメインリストと1つの既知のリストのみを持っていることを確認することもできます。ユーザーのメインリストを選択するには、次のようにします。

@user.lists.find(:first, :conditions => {:main_list => true})
于 2010-11-13T23:29:37.607 に答える