我正在构建一个应用程序,使用部分而不是现有的构建器方法来呈现表单字段(例如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而不是帮助程序呈现表单的任何提示或建议?提前谢谢。
答案 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
哈希中编辑,用于定义渲染部分中的局部值。