我认为这是:
<%
@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
。
答案 0 :(得分:17)
您可以在模型中创建一个返回您想要呈现的值的方法:
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) %>
答案 1 :(得分:2)
options_from_collection_for_select
也接受文本方法作为lambda,因此您可以在视图中编写自定义方法而不是模型,因为您有一些特定于视图的代码,您不希望污染模型。< / p>
<%= select_tag "Plan", options_from_collection_for_select(@plan, 'id', lambda { |plan| "#{plan.name} (#{plan.amount})")}, plan.id) %>