2009-06-27 9 views
6

Mam atrybut modelu FinancialDocument#document_type. Chciałbym, aby użytkownik mógł wybrać rodzaj dokumentu z menu wybierz HTML zaludnionej przez tablicę łańcuchów ...W Railsach w jaki sposób mogę zaimplementować menu wyboru HTML przy użyciu tablicy ciągów znaków?

doctypes = [ 'Invoice', 'Packing slip', 'Other' ] 

dla każdej opcji, wyświetlane etykiety i zwracana wartość byłaby identyczna.

Spojrzałem na pomocników select i collection_select, ale wydają się nastawieni na wybór modelu podrzędnego, a nie tylko na wartość ciągu. Nie mogłem odkryć, jak zgiąć je do mojego celu.

Oto jak próbuję to zrobić (używam haml, nie ERB) ...

form_for(@financial_document) do |f| 
    - doctypes = [ 'Invoice', 'PS', 'Packing slip', 'Other' ] 
    = f.collection_select @financial_document, :document_type, \ 
     doctypes, :to_s, :to_s, :include_blank => true 

otrzymuję ten błąd ...

undefined method `merge' for :to_s:Symbol 

Czy istnieje innego pomocnika, którego mógłbym użyć do tego? Lub sposób użycia select lub collection_select?

Odpowiedz

11

Czy doctypes jest kolekcją ActiveRecord? Patrząc na kod, nie wydaje się tak. Możesz użyć pomocnika select.

= f.select :document_type, doctypes, :include_blank => true 

Ponadto, nie trzeba przechodzić @financial_document jeśli zadzwonisz na znacznik obiektu formularza utworzonego z form_for.

1
doctypes.map!{|d| [d]} 
f.select(@financial_document, :document_type, doctypes) 

zrobię to myślę.

+0

Dziękuję, ale to nie zadziałało dla mnie ... niezdefiniowana metoda "scalania" dla [["Faktura"], ["PS"], ["Opakowanie poślizgu"], ["Inne"]]: Tablica – Ethan

+1

oh, usuń pierwszy argument i wszystko jest w porządku. –

Powiązane problemy