我正在构建一个应用程序,使用部分而不是现有的构建器方法来呈现表单字段(例如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
方法在此上下文中不存在,因此会引发错误。
关于如何使用部分而不是帮助器呈现表单有任何提示或建议吗?预先感谢您。
最佳答案
有一个名为@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
哈希中进行编辑,以在渲染的部分中定义本地值。
关于ruby-on-rails - 使用部分而不是助手渲染表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44510405/