Условная валидация Rails на основе полиморфного типа - PullRequest
1 голос
/ 19 января 2012

Я работаю с конфигурацией полиморфного наследования Rails - у меня есть следующие настройки:

User < ActiveRecord::Base
belongs_to :rolable, :polymorphic => true

Student < ActiveRecord::Base
has_one :user, :as => :rolable
accepts_nested_attributes_for :user

Teacher < ActiveRecord::Base
has_one :user, :as => :rolable
accepts_nested_attributes_for :user

Я хочу получить адрес электронной почты для учителей и имя пользователя для студентов (которые обычно не имеют адреса электронной почты). Я определил их как атрибуты модели User, но теперь я застрял, когда пытаюсь выполнить валидацию для ученика и учителя. Я не определил их в их соответствующих моделях, потому что я использую Devise, и будут другие типы пользователей. Абстрагирование того, что в настоящее время является типом для шаблона роли, также не подходит для моего конкретного сценария.

Поскольку имя пользователя и адрес электронной почты являются свойствами пользователя, в основном я хочу проверить, является ли поле rolable_type из полиморфного отношения типом студента, и если это так, сделать имя пользователя обязательным, а адрес электронной почты - нет, но в новом методе свойство isn ' т набор. Однако Rails «знает», что это ученик, поэтому кажется, что есть способ проверить тип экземпляра. Самая близкая ссылка на то, за что я стреляю, - это третий комментарий к принятому ответу на этот вопрос: Как применить другое правило проверки в соответствии с типом полиморфной ассоциации (Rails)? , но я У меня проблемы с получением правильного синтаксиса method_missing, так как у меня нет опыта работы с метапрограммированием. Я на правильном пути с этим? Или есть более простой способ? Или я должен вместо этого перенести свойства в полиморфные модели?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...