Prüfungs gehört in einer Build Situation Verein
-
22-09-2019 - |
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?
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