如何使用 rails 在表单助手中获取名称属性

How to get name attribute in a form helper with rails

出于许多冗长的原因,我希望能够在表单生成器中执行类似的操作:

<%= form_with model: resource, local: true, builder: CustomBuilder do |form| %>
  <input <%= form.tag_name :body %> ref="input"></input>
  <%= form.label :body %>
<% end %>

并像那样获取名称属性(不要自己构造)

目前我是这样做的:

class CustomBuilder < ActionView::Helpers::FormBuilder
  def tag_name object
    fragment = Nokogiri::HTML::DocumentFragment.parse(self.text_field(object)). children [0]
    "name='#{fragment.attributes["name"]}'"
  end
end

但我想知道是否有更好的方法...如果有人有一些想法,从字段中提取所有生成的属性(如值)也会很酷...

我知道 Tag::Base 中存在 tag_name,但如果不修改 rails 的代码库我就无法调用它(至少据我所知)

这种方法要好得多:

class ActionView::Helpers::FormBuilder
  def tag_name_for(method)
    ActionView::Helpers::Tags::TextField.new(object_name, method, {}).send(:tag_name)
  end
end

表格:

<%= form_with model: resource, local: true do |f| %>
  <input name="<%= f.tag_name_for(:body) %>" ref="input"></input>
<% end %>