繁体   English   中英

Rails 5.1中的自定义表单生成器

[英]Custom Form Builder in Rails 5.1

在我的Rails 5.1应用程序中,我希望构建一个自定义表单生成器(以设置某些标签的样式)。

因此,像往常一样,我从基础开始,尝试添加显示在Rails文档中的示例。

我已经添加了

#app/form_builders/custom_form_builder.rb
class CustomFormBuilder < ActionView::Helpers::FormBuilder
  def div_radio_button(method, tag_value, options = {})
    @template.content_tag(:div,
      @template.radio_button(
        @object_name, method, tag_value, objectify_options(options)
      )
    )
  end
end 

并以我的形式

<%= form_with model: @user, url: users_path, method: :post do |f|  %>
  ...
  <%= f.div_radio_button(:admin, "child") %>
<% end %>

但是我明白了

ActionView::Template::Error (undefined method `div_radio_button' for
#<ActionView::Helpers::FormBuilder:0x00007fb6e933d5b8>)

我在这里想念什么吗?

我看到的唯一区别是该示例使用了form_for而我使用了form_with但是由于所有标准构建器都可以使用,所以我想这不是问题。

谢谢

PS-添加CustomFormBuilder之后,我已经多次重新启动服务器。

不是吗

 
 
 
  
   <%= f.radio_button(:admin, "child") %>
 
  

代替

 
 
 
  
   <%= f.div_radio_button(:admin, "child") %>
 
  

UPDATE

抱歉,我昨天急于回答。 再次查看它, 您似乎缺少了表单的构建器选项 ,因此您仍在使用ActionView :: Helpers :: FormBuilder而不是自定义表单构建器类

 <%= form_for @person, :builder => MyFormBuilder do |f| %> I am a child: <%= f.div_radio_button(:admin, "child") %> I am an adult: <%= f.div_radio_button(:admin, "adult") %> <% end -%> 

上面的代码片段来自docs

所以您可能需要的是

 <%= form_with model: @user, url: users_path, method: :post, builder: CustomFormBuilder do |f| %> ... <%= f.div_radio_button(:admin, "child") %> <% end %> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM