Verwendung von Feldern aus einer Vereinigung (has_many) Modell mit formtastic in Schienen
-
25-09-2019 - |
Frage
Ich suchte und versuchte viel, aber ich kann es nicht erreichen, wie ich will .. also hier ist mein Problem.
class Moving < ActiveRecord::Base
has_many :movingresources, :dependent => :destroy
has_many :resources, :through => :movingresources
end
class Movingresource < ActiveRecord::Base
belongs_to :moving
belongs_to :resource
end
class Resource < ActiveRecord::Base
has_many :movingresources
has_many :movings, :through => :movingresources
end
Movingresources
enthält zusätzliche Felder, wie quantity
. Wir arbeiten an den Ansichten für ‚Rechnung‘. Dank formtastic das ganze Beziehung, was nur durch Schreiben zu vereinfachen
<%= form.input :workers, :as => :check_boxes %>
und ich bekomme eine nette Checkbox-Liste. Aber was ich bisher nicht herausgefunden, ist: Wie kann ich die zusätzlichen Felder aus ‚movingresource‘ verwende, neben oder unter jedem Checkbox meiner gewünschten Felder aus diesem Modell
?Ich sah verschiedene Ansätze, vor allem mit manuell durch eine Reihe von Objekten, Looping und die entsprechenden Formulare erstellen, mit: in einem form.inputs Teil, oder nicht. Aber keine dieser Lösungen waren sauber (zum Beispiel für die Bearbeitungsansicht gearbeitet, aber nicht für neue, weil die erforderlichen Objekte wurden nicht gebaut oder erzeugt und zum Erzeugen von ihnen verursachten ein Chaos).
Ich möchte Ihre Lösungen für das wissen!
Lösung
Okay, ich vermisste die Revolution von accepts_nested_attributes_for, das erklärt, warum es nicht wirklich funktioniert.
Das hat mir einen großen Schritt weiter, aber ich denke, irgendwo werde ich noch einige Komplikationen mit meinen komplexen Beziehungen habe ^ _ ^
class Moving < ActiveRecord::Base
has_many :movingworkers, :dependent => :destroy
has_many :workers, :through => :movingworkers
accepts_nested_attributes_for :movingworkers
end
<% form.inputs :for => :movingworkers do |movingworker| %>
<%= movingworker.inputs :worker, :quantity %>
<% end %>
Andere Tipps
Formtastic suchen: label_method Option könnte helfen. Z.
<%= form.input :movingworkers, :label_method => :worker %>
oder
<%= form.input :movingworkers, :label_method => Proc.new { |x| "#{x.worker} #{x.quantity}" } %>
Wenn die Felder in der neuen Ansicht nicht vorhanden sind, können Sie einfach testen, ob es neu ist ( new_record? ) und präsentieren einen anderen Satz von Feldern (wenn Sie in einen Teil wickeln in Dose sein ziemlich sauber Ansatz).