Rails的文档选择表单助手状态(see documentation):
select(object, method, choices = nil, options = {}, html_options = {}, &block)
这允许添加一个简单的类,如下所示:
<%= f.select :some_attr, MYOPTIONS, {}, {class: 'my-class'} %>
我的问题是,如何在将其用作块时为其添加类? Rails文档说明:
select(report, "campaign_ids") do
available_campaigns.each do |c|
content_tag(:option, c.name, value: c.id, data: { tags: c.tags.to_json })
end
end
当我像这样使用它时它不起作用:
<%= f.select :some_attr, {}, {class: 'my-class'} do %>
<% MYOPTIONS.each do |MYOPTION| do %>
<%= content_tag :option, MYOPTION.label, value: MYOPTION.value %>
<% end %>
<% end %>
如果我使用它也不起作用:
f.select :some_attr, class: 'my-class' do
该类未应用于HTML中的select标记。
答案 0 :(得分:4)
我解决了自己的问题,虽然我不完全理解答案,所以如果其他人更了解这一点,我很乐意听到你的回答。
为了让它工作,我只是在开头添加了一个额外的空哈希,如下所示:
options
第二个哈希值仍为html_options
,最后一个哈希值仍为include_blank
,因此,您也可以像这样添加f.select :some_attr, {}, {include_blank: true}, {class: 'my-class'}
:
{{1}}
但是,我不知道第一个哈希是什么,也不知道那里可以传递什么值。我查看了Rails源代码,但我仍然没有任何线索。如果您对此有所了解,我很乐意听到它。
答案 1 :(得分:1)
要注意几个奇怪的事情:
在您的示例中,您使用f.select
,您可以在此处找到参考:
https://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/select
只需要第一个参数,其余参数都有默认值。但是,要分配该HMTL类,您必须具有第四个参数的值,这也需要为第二个和第三个参数提供一些内容。
您最终得到的是一个有效的解决方案:
<%= f.select :some_attr, {}, {}, {class: 'my-class'} do %>
<% MYOPTIONS.each do |MYOPTION| do %>
<%= content_tag :option, MYOPTION.label, value: MYOPTION.value %>
<% end %>
<% end %>
提供的块优先于文字值(在这种情况下为空哈希)。
令人惊讶的是,如果您使用select_tag
代替f.select
呈现此代码,则传递一个区块将不是一个选项:
https://apidock.com/rails/ActionView/Helpers/FormTagHelper/select_tag