Rails7表单text_field的input_html配置JS控制器不生效问题
问题原因
Rails 7 原生的form.text_field辅助方法不支持input_html参数,该参数是Simple Form等第三方表单封装库才提供的配置项。
你在原生text_field中传入的input_html: { data: { controller: "flatpickr" } }不会被解析为input元素的HTML属性,会被方法直接忽略,最终渲染出的input标签上不存在data-controller="flatpickr"属性,Stimulus控制器自然无法完成挂载。
将data属性写在外层div上可以正常生效,是因为div是原生HTML标签,写在标签上的属性会被直接渲染到DOM中,和表单辅助方法的参数解析逻辑无关。
正确实现方案
原生Rails表单辅助方法会直接将顶级配置项中除预留参数外的内容渲染为HTML属性,不需要额外套input_html层,直接把data配置放在顶级参数位置即可,正确代码如下:
<%= form_with url: "/projects/#{@project.id}", method: :get do |form| %> <%= form.text_field :query, html5: true, data: { controller: "flatpickr" } %> <%= form.submit '🔎', class: 'button' %> <% end %>
上述写法渲染出的input标签会自带data-controller="flatpickr"属性,Stimulus控制器可以直接绑定在input元素上正常运行。如果需要验证配置是否生效,可以打开浏览器开发者工具查看对应input元素的DOM属性,确认data属性是否存在。
内容的提问来源于stack exchange,提问作者Daniel_Enqz
相关产品推荐
相关产品推荐

