2012-05-11 9 views
5

Sto usando Ryan Bates nested_form gem. Mi piacerebbe essere in grado di controllare l'ordine in cui sono elencati i campi nidificati. Ho un default_scope che funziona, ma ho bisogno di più controllo su questo a seconda dello scenario.Rails nested_form ordering

Idealmente qualcosa come

# In controller action 
@nesties = Nesty.order("name desc") 

# In view 
# If @nesties defined the following line would respect the @nesties ordering 
f.fields_for :nesties do |nestie-form| 

In questo momento è rispetterà l'ordinamento default_scope, ma non riesco a trovare un altro modo per controllare l'ordinamento.

risposta

7

Nel modello che ha l'associazione nesties:

has_many :nesties, :order => "name DESC" 

Questo potrebbe essere troppo globale per la vostra applicazione però.

Ma la cosa fondamentale è che fields_for non rileva su @nesties che preleva sull'associazione del modello della scheda genitore.

EDIT: Non sono sicuro che questo avrebbe funzionato con la gemma nested_form ma questa soluzione non pregiudicare il normale ordinamento dell'associazione nesties:

named_scope :ordered_nesties, :order => "name DESC" 

poi

f.fields_for :ordered_nesties do |nestie-form| 
+1

non ho potuto ottenere la portata/named_scope a lavorare come un simbolo per f.fields_for, ma il: ordine sull'associazione funziona. Sfortunatamente non offre molto più controllo rispetto all'uso di default_scope, ma grazie per le informazioni. – jfeust

12

Nota che accetta un fields_for secondo argomento, ed è qui che l'ambito nominato può essere specificato quando si specificano gli oggetti/associazioni da usare. Il seguente ha funzionato per me. Rails 3.x

#In Model Nestie 
scope :ordered_nesties, order("name DESC") 
belongs_to :parent 

#In Model Parent 
has_many :nesties 

#In View 
f.fields_for :nesties, @parent.nesties.ordered_nesties do |nestie-form| 

Spero che questo aiuti.

+3

Questa probabilmente dovrebbe essere la risposta accettata :) – imderek

+0

Vedere ['body scope deve essere callable'] (http://stackoverflow.com/questions/28951671/argument-error-the-scope-body-needs-to-be -callable) e dopo questa correzione della sintassi, questa soluzione ha funzionato meravigliosamente per me. – AOphagen

0

gem nested_form sembra avere un comportamento strano (è un bug a mio parere). Quando viene fornita una raccolta per il rendering, la ordina in base a "id" prima del rendering. Potrebbe essere trasparente per la maggior parte, ma in alcune situazioni è sgradevole.

La soluzione fornita da Shantanu risolve questo problema fornendo direttamente la raccolta ai campi per il rendering e bypassando efficacemente l'iteratore nested_forms.

Ho sprecato 2+ ore cercando di risolvere questo .. Grazie Shantanu!

1

Cordiali saluti, questa cosa ha funzionato per me senza fare la portata

f.fields_for :nesties, @parent.nesties.ordered("name DESC") do |nestie-form| 
1

sono stato in grado di ottenere i miei oggetti modulo nidificati ordinato utilizzando il seguente metodo. Si spera, aiuta a qualcun altro ...

<%= form.nested_fields_for :evaluations, 
     form.object.evaluations.target.sort_by! { |e| e.skill.sort } do |f| %> 
Problemi correlati