使用partials而不是帮助器渲染表单?

时间:2017-06-13 00:00:58

标签: ruby-on-rails

我正在构建一个应用程序,使用部分而不是现有的构建器方法来呈现表单字段(例如email_field)是有利的。举个例子,如下所示:

<%= rendered_form_for @article do |f| %>
  <%= f.text_field :title %> # renders /forms/text_field
  <%= f.email_field :author %> # renders /forms/email_field
  <%= f.submit "Create" %> # renders /forms/submit
<% end %>

我已尝试按the docs创建表单构建器:

# Used with rendered_form_for (a helper that injects this builder)
class RenderedFormBuilder < ActionView::Helpers::FormBuilder
  def email_field(attribute, options={})
    options.merge! attr: attribute
    render partial: '/forms/email_field', **options
  end
end

不幸的是,render方法在此上下文中不存在,因此会引发错误。

有关如何使用partials而不是帮助程序呈现表单的任何提示或建议?提前谢谢。

1 个答案:

答案 0 :(得分:1)

有一个名为@template的属性可以提供render方法。代码可以重构为:

# Used with rendered_form_for (a helper that injects this builder)
class RenderedFormBuilder < ActionView::Helpers::FormBuilder
  def email_field(attribute, options={})
    options.merge! attr: attribute
    @template.render partial: '/forms/email_field', locals: options
  end
end

还在locals哈希中编辑,用于定义渲染部分中的局部值。