ruby-on-rails - 用作 block 时如何将类添加到 Rails 选择表单助手

标签 ruby-on-rails ruby ruby-on-rails-3

Rails 选择表单帮助器的文档指出 ( see documentation ):

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

这允许添加一个简单的类,如下所示:

<%= f.select :some_attr, MYOPTIONS, {}, {class: 'my-class'} %>

我的问题是,在将它用作 block 时如何向它添加类? 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 中的选择标记。

最佳答案

我解决了我自己的问题,虽然我不完全理解答案,所以如果其他人对此有更好的理解,我很想听听你的答案。

为了让它工作,我只是在开头添加了一个额外的空散列,如下所示:

<%= f.select :some_attr, {}, {}, {class: 'my-class'} do %>
  <% MYOPTIONS.each do |MYOPTION| do %>
    <%= content_tag :option, MYOPTION.label, value: MYOPTION.value %>
  <% end %>
<% end %>

第二个散列仍然是 options,最后一个仍然是 html_options,例如,您也可以像这样添加 include_blank:

f.select :some_attr, {}, {include_blank: true}, {class: 'my-class'}

但是,我不知道第一个散列是什么,也不知道那里可以传递什么值。我查看了 Rails 源代码,但仍然没有头绪。如果您对此有深入的了解,我很想听听。

关于ruby-on-rails - 用作 block 时如何将类添加到 Rails 选择表单助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37095009/

相关文章:

ruby-on-rails - redirect_to 与渲染 - Michael Hartl 的教程

ruby-on-rails - 何时在 Rails 应用程序中使用单引号与双引号

ruby-on-rails - 如何覆盖模型验证模型中的错误消息

ruby - 确实开始。 . . end while 表示 'block' ?

ruby-on-rails - Rails 3.2 中空表列的最佳实践

ruby-on-rails - 使用 Rails 3.2.22.2 时,我可以使用的最高 Ruby 版本是多少?

ruby-on-rails - 您如何从 ActionMailer 类中访问 session ?

ruby-on-rails - 机车编辑器在尝试循环模型的条目时抛出 'NoMethodError'

ruby-on-rails - 如何从rails中的数据库中自动删除一条记录

ruby-on-rails - 无法在 Mac 上安装 Redmine