#ruby-on-rails-3
#ruby-on-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
.
Ответ №1:
Вы могли бы создать метод в вашей модели, который возвращает значение, которое вы хотите представить:
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) %>
Ответ №2:
options_from_collection_for_select
также принимает текстовый метод как лямбда, поэтому вы можете написать пользовательский метод в представлении вместо модели, если у вас есть какой-то специфичный для представления код, которым вы не хотите загрязнять модель.
<%= select_tag "Plan", options_from_collection_for_select(@plan, 'id', lambda { |plan| "#{plan.name} (#{plan.amount})")}, plan.id) %>