<%= 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)作为两个参数而不是一个。
答案 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