在Rails表单中使用textarea帮助器

mar*_*ria 15 forms ruby-on-rails helper

为什么此代码在文本区域显示错误?

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

mea*_*gar 27

FormHelper方法是text_area,不text_area_tag.

使用以下任一方法:

<%= f.text_area(:text, size: '50x10') %>
Run Code Online (Sandbox Code Playgroud)

要么:

<%= text_area_tag(:ad, :text, size: '50x10') %>
Run Code Online (Sandbox Code Playgroud)


Ada*_*sek 5

f您在第一行中创建的变量是对FormBuilder的引用.默认情况下它引用ActionView::Helpers::FormBuilder或您可以创建自己的.

调用textareas的FormBuilder助手text_area.FormBuilder帮助程序比常规HTML帮助程序更聪明.Rails模型可以逻辑嵌套,并且可以编写表单以反映这一点; FormBuilder帮助程序所做的主要工作之一是跟踪每个特定字段与数据模型的关系.

当您调用时f.text_area,由于f与命名的表单相关联:ad并且该字段已命名,:text因此将生成一个名为的字段ad[text].这是一个参数约定,它将自动解析为服务器上的Hash:{ :ad => { :text => "value" } }而不是参数的平面列表.这是一个巨大的便利,因为如果你有一个名为的模型Ad,你可以简单地调用Ad.create(params[:ad]),所有字段将被正确填写.

text_area_tag是未自动连接到表单的通用助手.你仍然可以让它做同样的事情FormBuilder#text_area,但你必须手动完成.这在FormBuilder帮助程序不打算涵盖的情况下非常有用.