在rails中自定义form_for标签

时间:2010-05-19 08:02:40

标签: ruby-on-rails

我想通过创建一个新的form_tag在表单中创建一个表。 ApplicationHelper中的以下代码失败:

module ApplicationHelper

class TabularFormBuilder < ActionView::Helpers::FormBuilder 
   # ... code to insert <tr> tags </tr> 
end

def tabular_form_for(name, object = nil, options = nil, &proc) 
   concat("<table>", proc.binding) 
   form_for(name, 
   object, 
   (options||{}).merge(:builder => TabularFormBuilder), 
   &proc) 
   concat("</table>", proc.binding) 
  end
end

我使用的视图是:

<h1>New project</h1>
<% tabular_form_for :project, :builder => ApplicationHelper::TabularFormBuilder do |f| %>
  <%= f.error_messages %>
  <%= f.text_field :name %>
  <%= f.text_area :description %>
  <%= f.text_field :location %>
  <%= f.submit 'Create' %>
<% end %>

我得到的错误是:

Projects#new中的NoMethodError    显示第5行引发的app / views / projects / new.html.erb:    {:builder =&gt; ApplicationHelper :: TabularFormBuilder}的未定义方法`errors':哈希

如何使这个自定义标记有效?

1 个答案:

答案 0 :(得分:0)

这是逐字发布的吗?因为你的第二个块需要在结束end标记内才能访问FormBuilder类吗?

我发现以下教程可能有所帮助: http://ramblingsonrails.com/how-to-make-a-custom-form-builder-in-rails