2010-02-03 6 views
9

Ich suchte und probierte viel, aber ich kann es nicht erreichen, wie ich will .. also hier ist mein Problem.Verwendung von Feldern aus einem Verband (has_many) Modell mit formtastic in Schienen

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, um die ganze Beziehung Sache einfach zu schreiben

<%= form.input :workers, :as => :check_boxes %> 

zu vereinfachen und ich bekomme eine wirklich schöne Checkbox-Liste. Was ich bisher noch nicht herausgefunden habe ist: Wie kann ich die zusätzlichen Felder von 'movingresource' verwenden, neben oder unter jedem Kontrollkästchen meine gewünschten Felder aus diesem Modell?

Ich sah verschiedene Ansätze, vor allem mit manuell durch ein Array von Objekten Schleifen und Erstellen der entsprechenden Formen, mit: für in einem form.inputs Teil oder nicht. Aber keine dieser Lösungen war sauber (z. B. wurde für die Bearbeitungsansicht gearbeitet, aber nicht für neue, da die erforderlichen Objekte nicht erstellt oder generiert wurden und deren Erzeugung eine Unordnung verursachte).

Ich möchte Ihre Lösungen dafür wissen!

Antwort

8

Okay, ich vermisste die Revolution von access_nested_attributes_for, dies 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 meinem komplexen Beziehungen haben^_^

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 %> 
+1

Beachten Sie, dass das eigentliche zugrunde liegende Modell direkt über den Formularbuilder aufgerufen werden kann: "movingworker.object". Siehe Zeile 1244 in action_view/helpers/form_helper.rb: 'attr_accessor: objektname,: objekt,: optionen' –

+0

Sie haben recht. Viele Dinge haben sich geändert und ich habe viele neue Dinge gelernt, dies ist jetzt für mich offensichtlich, aber es sollte erwähnt werden. – pduersteler

1

Wenn die Felder in der neuen Ansicht nicht vorhanden sind, können Sie einfach testen, ob es neu ist (new_record?) und eine andere Gruppe von Feldern präsentieren (wenn Sie in eine partielle einwickeln, kann ziemlich sauber sein Ansatz).

+0

Dank, du hast Recht. Aber da ich mit Schienen arbeite, bin ich an die Einfachheit gewöhnt, deshalb frage ich nach anderen Lösungen, um meinen Favoriten auszuwählen. Und ich denke auch, dass dies einigen anderen Menschen helfen kann. – pduersteler

4

Formtastic suchen: label_method Option helfen könnte. Z.B.

<%= form.input :movingworkers, :label_method => :worker %> 

oder

<%= form.input :movingworkers, :label_method => Proc.new { |x| "#{x.worker} #{x.quantity}" } %>