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) を 1 つではなく 2 つのパラメーターとして読み取っていることだと思います。

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 に答える