2009-06-27 4 views
6

Ich habe ein FinancialDocument#document_type Modellattribut. Ich möchte der Benutzer den Dokumenttyp aus einer HTML-Auswahlmenü durch ein Array von Strings bevölkert lassen ...In Rails, wie kann ich ein HTML-Auswahlmenü mit einem Array von Strings implementieren?

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

für jede Option, die angezeigte Etikett und Rückgabewert identisch sein würde.

Ich schaute auf die select und collection_select Helfer, aber sie scheinen darauf ausgerichtet, ein Kind-Modell, nicht nur ein String-Wert. Ich konnte nicht herausfinden, wie ich sie zu meinem Zweck verbiegen sollte.

Hier ist, wie ich versuche, es zu tun (ich verwende Haml, nicht 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 

ich diesen Fehler ...

undefined method `merge' for :to_s:Symbol 

Gibt es eine anderer Helfer, den ich dafür benutzen könnte? Oder eine Möglichkeit, select oder collection_select zu verwenden?

Antwort

11

Ist doctypes eine ActiveRecord-Sammlung? Mit Blick auf den Code scheint es nicht so. Sie können den select Helfer verwenden.

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

Auch brauchen Sie nicht @financial_document zu übergeben, wenn Sie das Tag auf dem Objekt mit form_for erstellt Formular aufrufen.

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

werde es tun, denke ich.

+0

Danke, aber das hat nicht für mich funktioniert ... undefinierte Methode 'merge 'für [[" Rechnung "], [" PS "], [" Lieferschein "], [" Andere "]]: Array – Ethan

+1

oh richtig, entfernen Sie das erste Argument und es ist in Ordnung. –

Verwandte Themen