Использование помощника textarea в Rails-формах

Почему этот код показывает ошибку в текстовой области?

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

Ответы

Ответ 1

Метод FormHelper text_area, а не text_area_tag.

Используйте одно из следующих действий:

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

или

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

Ответ 2

Переменная f, которую вы создаете в первой строке, является ссылкой на ваш FormBuilder. По умолчанию он ссылается на ActionView::Helpers::FormBuilder, или вы можете создать свой собственный.

Помощник FormBuilder для текстовых областей называется text_area. Помощники FormBuilder более умны, чем обычные помощники HTML. Модели Rails могут быть вложены логически, и ваши формы могут быть написаны, чтобы отразить это; одна из основных вещей, которые делают помощники FormBuilder, - это отслеживать, как каждое конкретное поле относится к вашей модели данных.

Когда вы вызываете f.text_area, так как f ассоциируется с формой с именем :ad, и поле имеет имя :text, оно сгенерирует поле с именем ad[text]. Это соглашение о параметрах, которое автоматически анализируется на хеш на сервере: { :ad => { :text => "value" } } вместо плоского списка параметров. Это огромное удобство, потому что, если у вас есть модель с именем Ad, вы можете просто вызвать Ad.create(params[:ad]), и все поля будут заполнены правильно.

text_area_tag - это общий помощник, который не связан с формой автоматически. Вы все равно можете сделать это так же, как FormBuilder#text_area, но вы должны сделать это вручную. Это может быть полезно в ситуациях, когда помощник FormBuilder не предназначен для покрытия.