【问题标题】:Using the textarea helper in Rails forms在 Rails 表单中使用 textarea 助手
【发布时间】:2011-05-07 15:57:40
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails forms helper


    【解决方案1】:

    FormHelper 方法是 text_area,而不是 text_area_tag

    使用以下任意一种:

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

    或:

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

    【讨论】:

    • 我有这个问题错误的参数数量(3 for 2)
    • @maria 当与表单构建器一起使用时,该方法只接受两个参数。查看更新的答案。
    【解决方案2】:

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

    textareas 的 FormBuilder 助手称为text_area。 FormBuilder 助手比普通的 HTML 助手更聪明。 Rails 模型可以在逻辑上嵌套,并且可以编写表单来反映这一点; FormBuilder 助手所做的主要事情之一是跟踪每个特定字段与您的数据模型的关系。

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

    text_area_tag 是通用助手,不会自动连接到表单。你仍然可以让它做和FormBuilder#text_area一样的事情,但是你必须手动做。这在 FormBuilder 助手不打算涵盖的情况下很有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多