2010-11-10 8 views
14

¿Por qué este código muestra un error en el área de texto?Uso del ayudante textarea en formularios Rails

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

Respuesta

25

El método FormHelper es text_area, no text_area_tag.

Utilice cualquiera de los siguientes:

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

o:

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

tengo este problema wrong number of arguments (3 for 2) maria

+0

@maria Cuando se utiliza con el generador de formularios, el método solo acepta dos argumentos. Ver respuesta actualizada. – meagar

5

La variable f que se está creando en la primera línea es una referencia a su FormBuilder. Por defecto, hace referencia al ActionView::Helpers::FormBuilder o puede crear uno propio.

El ayudante de FormBuilder para textareas se llama text_area. Los ayudantes de FormBuilder son más inteligentes que los ayudantes regulares de HTML. Los modelos Rails se pueden anidar lógicamente y sus formularios se pueden escribir para reflejar esto; Una de las cosas principales que hacen los ayudantes de FormBuilder es realizar un seguimiento de cómo se relaciona cada campo en particular con su modelo de datos.

Cuando se llama a f.text_area, ya f está asociado a un formulario denominado :ad y el campo se llama :text que va a generar un campo denominado ad[text]. Esta es una convención de parámetros que se analizará automáticamente en un Hash en el servidor: { :ad => { :text => "value" } } en lugar de una lista plana de parámetros. Esta es una gran conveniencia porque si tiene un modelo llamado Ad, simplemente puede llamar al Ad.create(params[:ad]) y todos los campos se completarán correctamente.

text_area_tag es el ayudante genérico que no está conectado a un formulario automáticamente. Todavía puede hacer que haga lo mismo que FormBuilder#text_area, pero debe hacerlo manualmente. Esto puede ser útil en situaciones que un asistente de FormBuilder no intenta cubrir.

Cuestiones relacionadas