Uso dei campi da un modello di associazione (has_many) con Formtastic a rotaie
-
25-09-2019 - |
Domanda
Ho cercato e provato un sacco, ma non riesco a realizzarlo come voglio .. ecco il mio problema.
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
contiene campi aggiuntivi, come quantity
. Stiamo lavorando sui punti di vista per 'bill'. Grazie a Formtastic per semplificare il tutto rapporto semplicemente scrivendo
<%= form.input :workers, :as => :check_boxes %>
E ho una vera e propria bella lista casella di controllo. Ma quello che non ho trovato finora è: come posso usare i campi aggiuntivi da 'movingresource', successiva o sotto ogni casella miei campi desiderati da quel modello
?Ho visto approcci differenti, soprattutto con loop manualmente attraverso una serie di oggetti e creando le forme appropriate, utilizzando: in un parte form.inputs, oppure no. Ma nessuna di queste soluzioni erano pulite (ad esempio, ha lavorato per la vista di modifica, ma non per i nuovi perché gli oggetti richiesti non sono stati costruiti o generati e li genera causato un disastro).
Voglio sapere le vostre soluzioni per questo!
Soluzione
Va bene, ho perso la rivoluzione del accepts_nested_attributes_for, questo spiega perché non è davvero lavorando.
Questo mi ha fatto un grande passo avanti, ma credo che da qualche parte io ancora avere alcune complicazioni con le mie relazioni complesse ^ _ ^
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 %>
Altri suggerimenti
di Formtastic: aiuto potrebbe opzione label_method. Per es.
<%= form.input :movingworkers, :label_method => :worker %>
o
<%= form.input :movingworkers, :label_method => Proc.new { |x| "#{x.worker} #{x.quantity}" } %>
Se i campi non esistono nella nuova vista, si può solo test se è nuovo ( new_record? ) e presentare un diverso insieme di campi (se si avvolge in un parziale nel barattolo essere un approccio piuttosto pulito).