Итак, несколько проблем с вышеуказанным подходом:
1) строка проверки. в то время как это выглядит так: если не должно быть реальной вещи, это не так. переформатировать как оператор if (в существующей модели):
validates :birthday, :presence => {:message => 'Birthday is required to enter classes.'}, :if => :birthday_needed?
Я также изменил название метода в модели, чтобы сделать его более понятным на английском языке, как если бы вместо вместо.
def birthday_needed?
birthday_needed
end
#checks for trueness of accessor named birthday_needed
2) Я могу решить проблему, установив средство доступа из необходимых контроллеров. Таким образом, контроллер одного из родителей установит для средства доступа значение true, а для другого - нет. Никаких странностей в скрытых полях формы или любых других случайных подходах, которые я искал:
контроллер создания родительского # 1, например:
def create
...
@entrant.being.birthday_needed = true
end
у другого родителя просто не будет установлен этот метод доступа.
Конечно, мне нужно будет создать соответствующий метод доступа для существующей модели, иначе произойдет ошибка:
attr_accessor :birthday_needed
А теперь все работает. Учителям не нужны дни рождения, а абитуриентам нужны. Наконец оба родителя могут ужиться.