У меня есть вложенная форма
Экипаж может иметь много собраний, а встреча может принадлежать одной бригаде.Для членов экипажа и собрания можно установить атрибут sex_id.
Я хочу добавить ошибку в объект собрания, когда Crew.meeting_id! = Meeting.gender_id
Я написал простоеvalidator
class MeetingGenderValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
if record.gender_id != record.crew.gender_id
msg = :wrong_gender
case record.crew.gender_id
when 1 then
msg = :crew_woman_only
when 2 then
msg = :crew_man_only
record.errors.add(attribute, msg, options)
end
end
end
end
Проблема в том, что при запуске этого валидатора переменная записи (наша модель Meeting) еще не связана с моделью Crew, поэтому я получаю сообщение об ошибке при вызове Nil.gender_id
Вот часть модели Meeting:
class Meeting < ActiveRecord::Base
belongs_to :crew
validates :gender_id, :meeting_gender => true
end
Вот часть модели Crew с ассоциацией:
class Crew < ActiveRecord::Base
has_many :meetings
accepts_nested_attributes_for :meetings
end
И мои команды # Создать фрагмент действия (контроллер):
class CrewsController < ApplicationController
def create
@crew = Crew.new(params[:crew]) # here are the meeting params too
@crew.user = current_user # assigning the user from session / not important here
if @crew.save
......
end
end