将参数传递给text_method的集合选择方法

时间:2012-08-02 16:31:38

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

  <%= collection_select(:catgory, :id, @categories, :id, :title, {}, data: { behavior: 'category_dropdown' }) %>

在上面的代码中,我需要将参数传递给title方法。有没有办法用collection_select做到这一点?

  <%= collection_select(:catgory, :id, @categories, :id, (:title, @program), {}, data: { behavior: 'category_dropdown' }) %>

编辑: 查看collection_select的内部文本text_method。它最终传递给.send方法,该方法应该允许element.send(:title,@ program)。但是,我认为我仍然无法通过参数的问题是,集合选择是读取(:title,@ program)作为两个参数而不是一个。

2 个答案:

答案 0 :(得分:2)

改为使用select

select "catgory", "id", @categories.map{|c| [c.title(@program), c.id]}, {}, data: { behavior: 'category_dropdown' }

应该有效。

答案 1 :(得分:0)

如果您的模型具有可覆盖的现有参数,则可以使用collection_select完成此操作:

f.collection_select( :your_model_id, 
  YourModel.all.map{|ym| ym.name = ym.custom_name(your_parameter); ym}, 
  :id, :name, 
  {:selected => @model_instance.logic}, 
  {:class => 'your class', :other => "..." } )

例如,我这样做是为了有条件地复制我的模型的name属性

class MyModel < ActiveRecord::Base
  DEFAULT_NAME_COUNT = 99

  def pluralized_name(n = DEFAULT_NAME_COUNT)
    begin
      return name.pluralize(n)
    rescue
    end

    name
  end
end