2010-11-10 8 views
14

Warum zeigt dieser Code einen Fehler im Textbereich?Verwenden des Textarea-Helpers in Rails-Formularen

<%= form_for(:ad, :url => {:action => 'create'}) do |f| %> 
    <%= f.text_field(:name) %> 
    <%= f.text_area_tag(:text, "", :size => "50x10") %> 
    <%= submit_tag("Submit") %> 
<% end %> 

Antwort

25

FormHelper Die Methode ist text_area, nicht text_area_tag.

Sie eine der folgenden:

<%= f.text_area(:text, size: '50x10') %> 

oder:

<%= text_area_tag(:ad, :text, size: '50x10') %> 
+0

Ich habe dieses Problem wrong number of arguments (3 for 2) maria

+0

@maria Bei Verwendung mit dem Formular-Generator akzeptiert die Methode nur zwei Argumente. Siehe aktualisierte Antwort. – meagar

5

Die f Variable, die Sie in der ersten Zeile schaffen ist ein Verweis auf Ihre Formbuilder. Standardmäßig verweist es auf ActionView::Helpers::FormBuilder oder Sie können Ihre eigenen erstellen.

Der FormBuilder-Helper für Textareas heißt text_area. FormBuilder-Helfer sind schlauer als normale HTML-Helfer. Rails-Modelle können logisch verschachtelt werden, und Ihre Formulare können so geschrieben werden, dass sie dies widerspiegeln. Eines der wichtigsten Dinge, die FormBuilder-Helfer tun, ist, zu verfolgen, wie sich jedes bestimmte Feld auf Ihr Datenmodell bezieht.

Wenn Sie f.text_area nennen, da f mit einer Form :ad und das Feld wird :text genannt assoziiert genannt es wird ein Feld ad[text] Namen erzeugen. Dies ist eine Parameterkonvention, die automatisch in einen Hash auf dem Server zerlegt wird: { :ad => { :text => "value" } } anstelle einer flachen Liste von Parametern. Dies ist ein großer Vorteil, denn wenn Sie ein Modell mit dem Namen Ad haben, können Sie einfach Ad.create(params[:ad]) anrufen und alle Felder werden korrekt ausgefüllt.

text_area_tag ist der generische Helfer, der nicht automatisch mit einem Formular verbunden ist. Sie können es immer noch tun, die gleichen Dinge wie FormBuilder#text_area, aber Sie müssen es manuell tun. Dies kann in Situationen nützlich sein, die ein FormBuilder-Helper nicht abdecken soll.

Verwandte Themen