Может быть, STI не то, что я хочу, и я открыт для всех предложений, но ради этих вопросов давайте предположим следующую реальную ситуацию:
Вы хотите, чтобы ваше приложение содержало данные APIдля разных поставщиков почты.Используя STI, у вас есть следующие модели
class MailSetting < ActiveRecord::Base
belongs_to :user
end
class MailChimp < MailSetting
end
class AWeber < MailSetting
end
class PostageApp < MailSetting
end
Теперь давайте выполним некоторые действия консоли:
user = User.first
setting = user.create_mail_setting(:type => "MailChimp")
Хорошо, теперь вы хотите добавить настройки ключа API.MailChimp просто использует ключ api_key.Aweber может использовать api_key и подпись, а Postageapp, скажем, использует систему api_key и token.
Вы бы расширили каждый подкласс, чтобы включить в базу данных все необходимые вам столбцы?Не могли бы вы собрать все STI и просто сделать обычные классы, скажем, MailChimp
, которые наследуются от AR?
Я пришел к выводу, что STI знает, что у всех моих пользователей будет MailSetting, это тип, который можетрасширяться со временем.Тем не менее, я испытываю боль в расширении этих подклассов таким способом, потому что вы не можете делать такие вещи, как user.mail_setting.connect
, не зная, из какого они подкласса, а затем, что мне нужно, чтобы соединить этих парней?
Мысли