Frage

Ich habe eine Mission Modell, dass has_many Aufgabe und die Aufgabe belongs_to Mission

Für Sicherheit ich diese Validierung auf der Task-Modell vorgenommen haben:

  validates_presence_of :mission_id
  validates_numericality_of :mission_id

Aber das Problem ist, dass, wenn eine Mission erstellen und fügen Sie Aufgaben wie folgt aus:

 @mission.tasks.build

Die Validierung kehrt Fehler, weil die Mission ID auf der Aufgabe null ist (die Mission wurde noch nicht erstellt)

Wenn ich die Validierung löschen, die Mission und Aufgabe ist successfuly erstellt, aber wie kann ich die Validierung halten und immer noch diese Arbeit? Ich konnte einen Rückruf tun nach der speichern, aber ich glaube nicht, das ist richtig, weil ich nicht ohne mission_id Aufgaben speichern will.

P. S. Ich Hidding mein Missionsfeld auf dem Formular. Wenn ich es sichtbar haben, zeigt es die currect Mission und alles ist in Ordnung. Aber wenn ich es HIDDE der Fehler passiert.

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

Ist die Form Reseting die von der Steuerung auf die neue Aktion gegeben Attribute?

War es hilfreich?

Lösung

Verwenden Sie in Mission.rb folgende

has_many :tasks
validates_associated :task

Task.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/ Active / Validierungen / ClassMethods.html

Andere Tipps

Wenn Sie ein verschachteltes Attribut Validieren, sollten Sie die folgende Validierung tun:

 validates_associated   :mission
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top