2 Stimmen

Validieren einer Zugehörigkeit zu einer Assoziation in einer Build-Situation

Ich habe ein Missionsmodell, das viele Aufgaben hat, und die Aufgabe gehört zur Mission

Zur Sicherheit habe ich diese Validierung am Aufgabenmodell vorgenommen:

  validates_presence_of :mission_id
  validates_numericality_of :mission_id

Das Problem ist jedoch, dass beim Erstellen einer Mission und Hinzufügen von Aufgaben wie dieser:

 @mission.tasks.build

Die Validierung ergibt einen Fehler, da die Missions-ID in der Aufgabe null ist (die Mission wurde noch nicht erstellt).

Wenn ich die Validierung lösche, wird der Auftrag und die Aufgabe erfolgreich erstellt, aber wie kann ich die Validierung beibehalten und trotzdem funktionieren? Ich könnte einen Rückruf nach dem Speichern durchführen, aber ich glaube nicht, dass das richtig ist, weil ich keine Aufgaben ohne eine mission_id speichern möchte.

P.S.. Ich verstecke mein Einsatzgebiet auf dem Formular. Wenn ich es sichtbar mache, wird die aktuelle Mission angezeigt und alles ist in Ordnung. Aber wenn ich es ausblende, kommt der Fehler.

<%=  f.hidden_field :mission, :label => "Missão" %>

Setzt das Formular die vom Controller bei der neuen Aktion angegebenen Attribute zurück?

3voto

Damien MATHIEU Punkte 30686

Wenn Sie ein verschachteltes Attribut validieren, sollten Sie die folgende Validierung durchführen:

 validates_associated   :mission

2voto

Salil Punkte 44916

Folgendes in Mission.rb verwenden

has_many :tasks
validates_associated :task

Aufgabe.rb

belongs_to :mission

in Controller

@mission=Mission.new(params[:mission])  
task= @mission.tasks.build(params[:task]) ###this is same as Task.new(:mission_id=>@mission.id)

if @mission.save #this will save only when mission as well as task are valids, also it will automatically assign mission_id to tasks table you have nothing to worry about it<br>
else
    #your error code will be here.......
end

Ref:- http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X