我想修改用户在给定集合的下拉列表中看到的内容。而不仅仅是“产品”字段可见,我希望它像“Vender产品,版本”或类似的东西。
可以使用'options_from_collection_for_select'方法完成吗?
我有一个Ruby on Rails视图,其中包含此行(slim):
select.form-control#external_tool_question_external_tool name="external_tool_question[external_tool]"
= options_from_collection_for_select(@external_tools, :id, "product")
控制器:
@external_tools = ExternalTool.all
模型(通过一些不同的迁移):
t.string :value
t.string :validator
t.string :example_answer
t.boolean :required, :null => false, :default => true
t.boolean :is_file_upload, :null => false, :default => false
add_reference :external_tool_questions, :external_tool, index: true
我尝试了什么:
我查看了这个文档,但找不到我要找的内容:http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-option_groups_from_collection_for_select
我只是猜测,但这不起作用:
代码:
options_from_collection_for_select(@external_tools, "id", "product vendor")
(也......我无法弄清楚如何让select标签工作......我也使用简单的形式......不是真正紧迫的问题,只是一个侧面问题)
答案 0 :(得分:2)
您可以更改ExternalTool
,如下所示:
class ExternalTool
def label
"#{vendor} #{product} v #{version}"
end
end
在控制器中设置变量时:
class SomeController < ApplicationController
def form_action
@external_tools = ExternalTool.all
end
end
您可以在模板中使用它,如下所示:
options_from_collection_for_select(@external_tools, "id", "label")
请注意,他的第三个参数中的options_from_collection_for_select
接受要调用的名称。我们在label
中使用了ExternalTool
。
希望有所帮助!祝你好运!
答案 1 :(得分:0)
我找到了一个解决方案,但确实发生了很大变化。而不是使用&#39; options_from_collection_for_select&#39;方法,使用&#39; options_for_select&#39;方法:
控制器
tools = ExternalTool.all.pluck(:id, :vendor, :product, :version)
@external_tools = []
tools.each do |et|
@external_tools.push(["#{et[1]} #{et[2]}, v #{et[3]}", et[0] ])
end
查看
select.form-control#external_tool_question_external_tool name="external_tool_question[external_tool]"
= options_for_select(@external_tools)
我想我也可以在模型中创建一个方法。
答案 2 :(得分:0)
您可以将Proc传递给 options_from_collection_for_select text_method 。
e.g。
group values by price_value into g