2010-02-03 9 views
9

Ho cercato e provato molto, ma non riesco a realizzarlo come voglio .. quindi ecco il mio problema.Utilizzo di campi da un modello di associazione (has_many) con formtastic nelle guide

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 alle opinioni per "bolletta". Grazie alla Formtastic per semplificare il tutto rapporto semplicemente scrivendo

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

e ottenere un vero e proprio bella lista casella di controllo. Ma quello che non ho scoperto finora è: come posso usare i campi aggiuntivi da 'movingresource', accanto o sotto ogni checkbox i miei campi desiderati da quel modello?

Ho visto approcci diversi, principalmente con il looping manuale di una serie di oggetti e la creazione di moduli appropriati, utilizzando: for in a form.inputs part o non. Ma nessuna di queste soluzioni era pulita (ad esempio funzionava per la vista di modifica ma non per quella nuova perché gli oggetti richiesti non venivano creati o generati e generandoli causava un pasticcio).

Voglio sapere le vostre soluzioni per questo!

risposta

8

Ok, ho perso la rivoluzione di accept_nested_attributes_for, questo spiega perché non funziona davvero.

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

Si noti che è possibile accedere direttamente al modello sottostante direttamente tramite il formbuilder, quindi: 'movingworker.object'. Vedi la riga 1244 in action_view/helpers/form_helper.rb: 'attr_accessor: object_name,: object,: options' –

+0

hai ragione. Molte cose sono cambiate e ho imparato molte cose nuove, questo è ora ovvio per me, ma dovrebbe essere menzionato. – pduersteler

1

Se i campi non esistono nella nuova vista, è sufficiente verificare se è nuovo (new_record?) e presentare un diverso set di campi (se si inserisce in un parziale in può essere abbastanza pulito approccio).

+0

grazie, hai ragione. Ma dal momento che lavoro con i binari, sono abituato alla semplicità, quindi sto chiedendo altre soluzioni per scegliere il mio preferito. E penso anche che questo possa aiutare alcune altre persone. – pduersteler

4

di Formtastic: opzione label_method potrebbe aiutare. Per esempio.

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

o

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