在Rails表单中使用textarea助手

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

 {:action => 'create'}) do |f| %>   "50x10") %>   

FormHelper方法是text_area ,而不是text_area_tag

使用以下任一方法:

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

要么:

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

您在第一行中创建的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帮助程序不打算涵盖的情况下非常有用。