Ответ 1
Метод FormHelper
text_area
, а не text_area_tag
.
Используйте одно из следующих действий:
<%= f.text_area(:text, size: '50x10') %>
или
<%= text_area_tag(:ad, :text, size: '50x10') %>
Почему этот код показывает ошибку в текстовой области?
<%= form_for(:ad, :url => {:action => 'create'}) do |f| %>
<%= f.text_field(:name) %>
<%= f.text_area_tag(:text, "", :size => "50x10") %>
<%= submit_tag("Submit") %>
<% end %>
Метод FormHelper
text_area
, а не text_area_tag
.
Используйте одно из следующих действий:
<%= f.text_area(:text, size: '50x10') %>
или
<%= text_area_tag(:ad, :text, size: '50x10') %>
Переменная 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 не предназначен для покрытия.