2010-09-04 6 views
11

muszę zdać kolekcji standardowej Wybierz wejście w Formtastic:Jak prawidłowo przechodzić kolekcję dla wejścia w Formtastic

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

Problemem jest jednak, że muszę Formtastic dostęp do innej metody niż nazwisko. Teraz to naprawdę problem. Zawsze mogę przekazać Array

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

Problem polega na tym, że po tym będę się strun w regulatorze zamiast identyfikatorów, które nie są pożądane. Starałem się przekazać Hash Zamiast:

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

Teraz problem jest, że ponieważ używam Ruby 1.8.7, kolejność Hash jest nieokreślona i oczywiście potrzeby zamawiane wejście ...

mogę wyobraź sobie rozwiązania, ale wszystkie wymagają niepotrzebnego kodu.

Każdy pomysł, jak rozwiązać ten problem?

Odpowiedz

15

Spróbuj:

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

co jeśli chcemy nie tylko: format_name, ale coś podobnego:: format_name +: another_name? – kokemomuke

4

Nie ma bezpośredniego wskazania w formtastic dokumentacji, ale kolekcja może być zagnieżdżone tablice, tak więc problem jest rozwiązany przez:

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

Zrobiłem to dla mnie, ponieważ nadal używam wersji Ruby 1.8.7. Dzięki! – shakerlxxv

0

Jest to poprawny sposób teraz:

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

ustawia collection do tablicy [nazwa, identyfikator] krotki. Łatwo!

wkrótce wycofywana sposób:

użyć opcji member_label np

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

Dokumentacja to here in a code comment.

Powiązane problemy