Rails + slim:选择标签上的数据属性未呈现

Posted

技术标签:

【中文标题】Rails + slim:选择标签上的数据属性未呈现【英文标题】:Rails + slim: Data attributes on a select tag not getting rendered 【发布时间】:2020-12-04 23:41:08 【问题描述】:

数据属性不会在此选择标记上呈现。知道我错过了什么吗?

=f.select :template_kind, options_for_select(f.object.class::TEMPLATE_KINDS, selected: f.object.template_kind), include_blank: true, data: target: "template-form.switch", action: "change->template-form#handleChange"

即使是类属性也不会被渲染:

=f.select :template_kind, options_for_select(f.object.class::TEMPLATE_KINDS, selected: f.object.template_kind), include_blank: true, class: "myclass"

这是两种情况下的输出:

<select name="system_template[template_kind]" id="system_template_template_kind">
<option value=""></option>
<option value="email_message">email_message</option>
<option selected="selected" value="page">page</option>
</select>

如果我将数据属性或类移动到另一个(非选择)标签上,它们会被渲染。

Rails 和 slim-lang 的最新版本

文档显示从第三个参数开始应该可以指定html属性https://api.rubyonrails.org/v6.0.3.2/classes/ActionView/Helpers/FormTagHelper.html#method-i-select_tag

【问题讨论】:

您确定要查找合适的文档吗?您链接到 select_tag,您应该检查文档以获取表单选择:api.rubyonrails.org/v6.0.3.2/classes/ActionView/Helpers/…。 Html 选项应该在括号中 include_blank: true, class: "myclass" @nuaky 是的,就是这样!谢谢你这么快回复。下面有一个相同效果的答案,我会接受。感谢您的帮助。 【参考方案1】:

按照方法定义:

select(object, method, choices = nil, options = , html_options = , &block) 

您需要将include_blank: true 包装到 中,否则它们将用于options 方法参数而不是html_options

f.select :template_kind,
         options_for_select(f.object.class::TEMPLATE_KINDS, selected: f.object.template_kind),
          include_blank: true ,
         data:  target: "template-form.switch", action: "change->template-form#handleChange" 

与class属性相同,应该直接进入html_options:

...,
   include_blank: true ,
   class: "myclass",
    data:  target: "template-form.switch",
            action: "change->template-form#handleChange"  

【讨论】:

谢谢。这与@nuaku 的建议相同,我接受了。

以上是关于Rails + slim:选择标签上的数据属性未呈现的主要内容,如果未能解决你的问题,请参考以下文章

在 Slim 中使用 Ruby on Rails 有条件地创建隐藏属性

如何在 Rails 表单选择标签中添加数据属性?

Ruby Slim - 在 DOM 属性中嵌入 JSON

Rails slim 将 html 渲染为文本

ruby on rails vue 和 html.slim

如何将 HTML5 数据属性添加到 Rails 表单标签标签?