2011-04-12 9 views
3

私は、私の見解では、これを持って次の生成Rails 3のoptions_from_collection_for_selectでメニューオプションをカスタマイズするにはどうすればよいですか?

<% 
@plan = Plan.limit(4).all 
plan ||= Plan.find(params[:plan_id]) 

%> 

<%= select_tag "Plan", options_from_collection_for_select(@plan, 'id', 'name', plan.id) %><br /> 

<select id="Plan" name="Plan"><option value="1">Gecko ($50)</option> 
<option value="2" selected="selected">Iguana ($99)</option> 
</select> 

価格:しかし

<select id="Plan" name="Plan"><option value="1">Gecko</option> 
<option value="2" selected="selected">Iguana</option> 
</select> 

が、私はそれは、次のオプションを作成したいと思います角括弧内はplan.amountです。

答えて

15

あなたが提示する値を返すモデル内のメソッドを作成できます:あなたが包みの代わりにモデルのビューでのカスタムメソッドを書くことができるようにもラムダなどのテキスト方法を受け入れ

class Plan < ActiveRecord::Base 
    ... 

    def display_name 
    "#{self.name} (#{self.amount})" 
    end 
end 

# View 
<%= select_tag "Plan", options_from_collection_for_select(@plan, 'id', 'display_name', plan.id) %> 
+0

これは素晴らしいです。ありがとう。 – marcamillion

1

options_from_collection_for_selectをモデルを汚染したくないビュー固有のコードがいくつかあります。

<%= select_tag "Plan", options_from_collection_for_select(@plan, 'id', lambda { |plan| "#{plan.name} (#{plan.amount})")}, plan.id) %> 
関連する問題