2011-04-12 3 views
3

у меня есть это, на мой взгляд:Как настроить параметр меню в options_from_collection_for_select в Rails 3?

<% 
@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</option> 
<option value="2" selected="selected">Iguana</option> 
</select> 

Однако, я хотел бы, чтобы произвести следующие варианты:

<select id="Plan" name="Plan"><option value="1">Gecko ($50)</option> 
<option value="2" selected="selected">Iguana ($99)</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) %> 
Смежные вопросы