Два простых вопроса о реализации STI

#ruby-on-rails #sti

#ruby-on-rails #sti

Вопрос:

Я использую STI для своих пользовательских моделей. У меня есть класс User и подклассы Seller и Customer. Пользователь не может быть и тем, и другим, поэтому я думаю, что STI подходит для этого случая. У меня есть два вопроса:

  1. Как мне ограничить создание пользовательских экземпляров, чтобы можно было создавать только продавцов или клиентов? Думаю, я мог бы подтвердить наличие Type, но мне кажется, что это не совсем правильно.

  2. Могу ли я иметь дополнительные, разные поля для продавцов и клиентов с STI? Как?

Ответ №1:

Вы можете разрешить сохранение пользователей и заказчиков, только выполнив:

 validates_inclusion_of :type, :in => [:customer, :user]
  

Что касается вашего второго вопроса, ответ таков: добавьте столбцы. Если вы добавите столбцы для клиента, пользовательская модель их проигнорирует, так что ничего страшного. Это зависит от вашего варианта использования, хотя в некоторых случаях лучше избегать STI.

Комментарии:

1. вы бы попробовали add_column :child_name, :field_name, :type_name ? Похоже, у меня это не работает.