2012-08-02 34 views
3
<%= collection_select(:catgory, :id, @categories, :id, :title, {}, data: { behavior: 'category_dropdown' }) %> 

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

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

编辑: 纵观内部的collection_select的text_method。它最终传递给.send方法,该方法应该允许element.send(:title,@program)。但是,我认为为什么仍然无法传递参数的问题是,collection select正在读取(:title,@program)作为两个参数而不是一个参数。

+0

你有访问在您的类别模型中使用@program? – InternetSeriousBusiness 2012-08-02 16:41:19

+0

不幸的是它是一个has_many关系,所以我需要通过程序来知道哪个程序要放在标题中。 – John 2012-08-02 16:42:45

回答

1

使用select代替:

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

应该是工作。

+0

对不起,括号内有错误:) – 2012-08-02 17:56:05

+0

没问题。我很高兴有一个解决方案。谢谢! – John 2012-08-02 18:08:12

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