use*_*525 5 ruby ruby-on-rails ruby-on-rails-3
select(object, method, choices = nil, options = {}, html_options = {}, &block)
Run Code Online (Sandbox Code Playgroud)
这允许添加一个简单的类,如下所示:
<%= f.select :some_attr, MYOPTIONS, {}, {class: 'my-class'} %>
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何在将其用作块时向其添加类?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
Run Code Online (Sandbox Code Playgroud)
当我像这样使用它时它不起作用:
<%= f.select :some_attr, {}, {class: 'my-class'} do %>
<% MYOPTIONS.each do |MYOPTION| do %>
<%= content_tag :option, MYOPTION.label, value: MYOPTION.value %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
如果我使用,它也不起作用:
f.select :some_attr, class: 'my-class' do
Run Code Online (Sandbox Code Playgroud)
该类不适用于 HTML 中的 select 标记。
我解决了我自己的问题,虽然我不完全理解答案,所以如果其他人更好地理解这一点,我很乐意听到你的答案。
为了让它工作,我只是在开头添加了一个额外的空哈希,如下所示:
<%= f.select :some_attr, {}, {}, {class: 'my-class'} do %>
<% MYOPTIONS.each do |MYOPTION| do %>
<%= content_tag :option, MYOPTION.label, value: MYOPTION.value %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
第二个散列仍然options是html_options,最后一个仍然是,所以作为一个例子,你也可以include_blank像这样添加:
f.select :some_attr, {}, {include_blank: true}, {class: 'my-class'}
Run Code Online (Sandbox Code Playgroud)
但是,我不知道第一个哈希是什么,也不知道可以在那里传递什么值。我已经查看了 Rails 源代码,但我仍然不知道。如果您对此有所了解,我很乐意听到。
需要注意的几个奇怪之处:
在您的示例中,您使用的是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 %>
Run Code Online (Sandbox Code Playgroud)
当提供块时,该块优先于文字值(在本例中为空散列)。
令人惊讶的是,如果您使用select_tag而不是渲染此标签f.select,则传递块将不是一个选项:
https://apidock.com/rails/ActionView/Helpers/FormTagHelper/select_tag
| 归档时间: |
|
| 查看次数: |
1644 次 |
| 最近记录: |