2010-09-04 9 views
11

necesito para pasar una colección a la selección de entrada estándar en la Formtastic:Cómo pasar adecuadamente la colección para la entrada en Formtastic

f.input :apple, :as => :select, :collection => Apple.all 

El problema es, sin embargo, que necesito Formtastic para acceder a un método diferente de nombre. Ahora esto es realmente un problema. Siempre puedo pasar la matriz

f.input :apple, :as => :select, :collection => Apple.map { |a| a.format_name } 

El problema es, que después de esto voy a tener cadenas en el controlador en lugar de identificadores que no se desea. Traté de pasar Hash lugar:

options = Hash.new 
Apple.each { |a| Apple.store(a.format_name, a.id) } 
f.input :apple, :as => :select, :collection => options 

Ahora el problema es que desde que estoy usando Rubí 1.8.7, el orden Hash es indeterminado y de necesidad supuesto pedí de entrada ...

que pueda imagine algunas soluciones, pero todas requieren código innecesario.

¿Alguna idea de cómo solucionar este problema?

Respuesta

15

Probar:

f.input :apple, :as => :select, :collection => Apple.all, :label_method => :format_name, :value_method => :id 
+0

qué tal si no solo queremos: nombre_formato, pero algo así: nombre_formato +: ¿otro nombre? – kokemomuke

4

No hay ninguna indicación directa en la documentación Formtastic, pero la recolección se puede anidar matrices, así, así se consigue mediante:

f.input :apple, :as => :select, :collection => Apple.map { |a| [ a.format_name, a.id ] } 
+0

Esto me sirvió de algo, ya que todavía uso una versión de Ruby 1.8.7. ¡Gracias! – shakerlxxv

0

Ésta es la manera correcta ahora:

f.input :apple, 
     as: :select, 
     collection: Apple.pluck(:format_name, :id) 

ajusta collection a una matriz de [nombre, id] tuplas. ¡Fácil!

camino pronto-a-ser en desuso:

Utilice la opción member_label, por ejemplo,

f.input :apple, 
     as: :select, 
     collection: Apple.all, 
     member_label: :format_name 

La documentación es here in a code comment.

Cuestiones relacionadas