Ich habe ein verschachteltes FormularRails Validiere Kind mit Eltern
Eine Crew kann viele Meetings haben, ein Meeting kann zu einer Crew gehören. Eine Crew und ein Meeting können beide das Attribut gender_id gesetzt haben.
Ich möchte einen Fehler an das Meeting-Objekt hinzufügen, wenn Crew.meeting_id! = Meeting.gender_id
ich eine einfache Prüfung
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
Das Problem geschrieben habe, ist, wenn diese Prüfung durchgeführt wird, die Plattengröße (unser Meeting-Modell), ist noch nicht mit der Mannschaft Modell zugeordnet ist, so dass ich einen Fehler beim Aufruf Nil.gender_id
Hier ist der Teil des Modells Meeting:
Hier 210class Meeting < ActiveRecord::Base
belongs_to :crew
validates :gender_id, :meeting_gender => true
end
ist der Teil der Besatzung Modells mit dem Verein:
class Crew < ActiveRecord::Base
has_many :meetings
accepts_nested_attributes_for :meetings
end
Und meine Crew # erstellen Aktion Schnipsel (Controller):
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
Warum du die gender_id an erster Stelle duplizierst? Sie können innerhalb eines Meetings zur gender_id der Crew zurückkehren: meeting.crew.gender_id –
aktualisierte Quelle, thx, aber das löst das Problem nicht. Wenn der Validator ausgeführt wird, ist record.crew immer noch Nil – astropanic
Ich meine eher: Warum hat Meeting seine eigene gender_id? Warum nicht einfach nur auf Crew speichern? –