Наследование классов или наследование отдельных таблиц в Rails 2.3 - PullRequest
1 голос
/ 14 ноября 2010

У меня следующий сценарий, и я не уверен, стоит ли мне использовать наследование классов или наследование одной таблицы:

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_id, known_list_id и regular_list_id к Word объект / класс. Это кажется громоздким. Могу ли я сделать что-то вроде:

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

а затем что-то вроде:

@user.main_list.find_by_name("MainList")?

Единственная проблема в том, что кто-то может назвать RegularList "MainList".

1 Ответ

1 голос
/ 14 ноября 2010

Вы можете сделать что-то вроде этого:

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

В классе списка вы можете добавить два логических поля в список;один для main_list и другой для known_list.В этом классе вы также можете добавить проверки, чтобы убедиться, что у каждого пользователя есть только один основной список и один известный список.Чтобы выбрать основной список для пользователя, вы можете сделать:

@user.lists.find(:first, :conditions => {:main_list => true})
...