我有一个应用程序,用户可以在其中从下拉菜单中选择一种技术。我想编写最常见的选项,并展示数据库中的技术。
是否可以在一个下拉菜单中包含预先确定的选项以及技术列中的选项?像这样的东西?
<%= f.select( :tech, [['Tech1'],['Tech2'],['Tech3'], ['Tech4'], Project.all.map {|p| [p.tech]}.uniq], :prompt => "Select a previous Technology") %>
谢谢
我有一个应用程序,用户可以在其中从下拉菜单中选择一种技术。我想编写最常见的选项,并展示数据库中的技术。
是否可以在一个下拉菜单中包含预先确定的选项以及技术列中的选项?像这样的东西?
<%= f.select( :tech, [['Tech1'],['Tech2'],['Tech3'], ['Tech4'], Project.all.map {|p| [p.tech]}.uniq], :prompt => "Select a previous Technology") %>
谢谢
选择所有Project
项目,仅仅为了获得tech
列而构建它们是非常过分的。
db_techs = Project.select("projects.tech").uniq.map {|p| [p.tech]}
(这将生成一个SELECT DISTINCT projects.tech
查询,而不是SELECT * FROM projects
)
此外,您不希望 basic_techs 在列表中出现两次,所以
all_techs = basic_techs + db_techs
all_techs.uniq!
您可以简单地添加数组来连接它们:
basic_techs = [['Tech1'],['Tech2'],['Tech3'], ['Tech4']]
db_techs = Project.all.map {|p| [p.tech]}.uniq
<%= f.select( :tech, basic_techs + db_techs, :prompt => "Select a previous Technology") %>