2012-05-11 16 views
5

Estoy usando Ryan Bates nested_form gem. Me gustaría poder controlar el orden en el que se enumeran los campos anidados. Tengo un valor predeterminado que funciona, pero necesito más control sobre esto dependiendo del escenario.Rails nested_form orden

Lo ideal sería algo así como

# 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| 

En este momento se respetará el orden default_scope, pero no puedo encontrar ninguna otra manera de controlar el orden.

Respuesta

7

En el modelo que tiene la asociación nesties:

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

Esto puede ser demasiado global para su aplicación sin embargo.

Pero lo fundamental es que fields_for no recupera en @nesties que retoma la asociación del modelo de formulario principal.

EDIT: No estoy seguro que trabajaría con la gema nested_form pero esta solución no afectaría el orden normal de la asociación nesties:

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

continuación

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

No pude conseguir el alcance/named_scope para que funcione como un símbolo para f.fields_for, pero el orden: en la asociación funciona. Lamentablemente, no ofrece mucho más control que simplemente usar default_scope, pero gracias por la información. – jfeust

12

Tenga en cuenta que acepta un fields_for segundo argumento, y ahí es donde se puede especificar el alcance nombrado al especificar los objetos/asociación a usar. Lo siguiente funcionó para mí. 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| 

Espero que esto ayude.

+3

Probablemente esta sea la respuesta aceptada :) – imderek

+0

Consulte ['El cuerpo del alcance debe ser invocable'] (http://stackoverflow.com/questions/28951671/argument-error-the-scope-body-needs-to-be -callable) y después de esa corrección de sintaxis, esta solución funcionó maravillosamente para mí. – AOphagen

0

nested_form gem parece tener un comportamiento extraño (es un error en mi opinión). Cuando se le entrega una colección para representar, la ordena mediante "id" antes de representarla. Puede ser transparente para la mayoría, pero es desagradable en algunas situaciones.

La solución dada anteriormente por Shantanu resuelve ese problema al proporcionar directamente la colección a fields_for para renderizar y eludir efectivamente el iterador nested_forms.

Perdí 2+ horas tratando de resolver esto ... Gracias Shantanu!

1

FYI, esto funcionó para mí y sin que limite el alcance

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

pude tener en mis objetos de formulario anidados pedir mediante el siguiente método. Con suerte, ayuda a otra persona ...

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