3
  <%= 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 的内部结构。它最终被传递给应该允许 element.send(:title, @program) 的 .send 方法。但是,我认为我仍然无法传递参数的问题是集合选择正在读取 (:title, @program) 作为两个参数而不是一个。

4

2 回答 2

2

改用select

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

应该工作。

于 2012-08-02T16:56:15.247 回答
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
于 2016-11-22T12:02:03.323 回答