如何将数据属性添加到我的选择框的每个选项?

时间:2013-12-28 11:08:07

标签: ruby-on-rails ruby ruby-on-rails-3 custom-data-attribute

在我的Rails应用程序中,我有这个选择框:

<%= f.select :invoice_id, current_user.invoices.numbers_ordered %>

这是我的Invoice课程:

class Invoice < ActiveRecord::Base

  belongs_to :user

  def self.numbers_ordered
    order(:number).map { |i| [ i.number, i.id ] }
  end

  ...

end

如何在不改变现有代码的情况下为每个选项添加data-attribute

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

def self.numbers_ordered
  order(:number).map { |i| [ i.number, i.id, :'data-attribute' => i.some_data ] }
end

select在内部使用options_for_select并获取options_for_select的所有参数。

请参阅selectoptions_for_selectcomment in options_for_select

的Rails API

答案 1 :(得分:1)

这很好地解释了它:https://stackoverflow.com/a/9076805/2036529

在您看来,您可以使用:

<%= f.select :invoice_id, options_for_select(current_user.invoices.numbers_ordered) %>

并在您的Invoice类中,将方法更改为以下内容:

def self.numbers_ordered
   order(:number).map { |i| [ i.number, i.id, {'data-customAttr': "#{i.attr_1} -- #{i.attr_2}" ] }
end