Ich habe eine has_many Zuordnung zwischen Elementen und ihren Komponenten über eine Tabelle namens ComponentItems. ComponentItems enthält eine Spalte quantity
zusätzlich zu item_id
und component_id
. Wie ist es möglich, meinem Formular ein Nummernfeld hinzuzufügen, das die Anzahl der für eine erforderlichen component
angibt? Das Formular muss ein Nummernfeld für jedes Element in der Datenbank enthalten, auch wenn keine Beziehung existiert (d. H. @item.component_ids.empty? == true
).Rails 4 Formular, um has_many durch zusätzliche Spalte
class Item < ActiveRecord::Base
has_many :components, through: :component_items
has_many :component_items
end
class Component < Item
has_many :items, through: :component_items
has_many :component_items
end
class ComponentItem < ActiveRecord::Base
belongs_to :item
belongs_to :component
end
Ich glaube, ich habe versucht jede Permutation von Modell, Controller und Form_builder möglich, mit Ausnahme der richtigen.
Als Antwort auf die folgende Antwort finden Sie hier ein Formular, das ein Kontrollkästchen und den Artikelcode für Komponentenelemente anzeigt, aus denen ein bestimmter Artikel besteht.
<%= form_for [@item] do |f| %>
<%= f.collection_check_boxes :component_items, Item.active.where.not(sku: @item.sku).sort_by{|n| n.sku}, :id, :sku do |b| %>
<%= b.check_box %> <%= b.label %><br/>
<% end %>
<% end %>
Also, idealerweise würde ich die check_box durch ein Nummernfeld für die Menge ersetzen. Wie?
'i.component_items.to_a.map (&: quantity)' gibt ein Array von Mengen für jedes der Komponentenelemente, hilft aber nicht bei der Formulargenerierung. Ich habe der Frage ein Beispiel hinzugefügt. – mvanio
Entschuldigung, ich habe nicht verstanden, was genau Sie wollen, Sie wollen Feld, die Menge Nummer für jede Komponente von item.components zeigen, bin ich richtig? –
Fast. Es muss Menge für jeden Artikel anzeigen. Für Komponenten ist dies mindestens 1, für andere Elemente sollte es 0 sein. – mvanio