我有一个数组正在填充视图(erb)文件中的下拉列表。我想让下拉列表中的值按值排序(它是名称列表Last,First ...只是希望它们按最后排序)。这就是我所拥有的:
<%
if @users
users_arr = []
@users.each do |u|
users_arr << ["#{u.name}", u.id]
end
end
first_selected_parent = @kid.users && @kid.users.first ? @kid.users.first.id : ""
second_selected_parent = @kid.users && @kid.users.count > 1 ? @kid.users.last.id : ""
%>
我用Google搜索并试了很多东西,但还没弄清楚。谢谢!
答案 0 :(得分:0)
你为什么在这里使用数组?使用内置的ActiveRecord::Collection
对象,它们几乎像数组,但可以使用所有的ActiveRecord方法。这段代码:
User.all.order(:last_name => :desc)
抓取所有User
条记录,然后按last_name
字段降序对它们进行排序。您可以使用.each
迭代结果:
@users = User.all.order(:last_name => :desc)
@users.each do |user|
# do stuff
end
如果您尝试将HTML <select>
元素填充为表单的一部分,请跳过所有奇怪的数组操作并使用Rails的表单助手:
<%= form_for @resource, url: form_submission_path do |f| %>
<%= f.select :field_name, options_for_select(User.all.order(:last_name => :desc).map{|u| [u.last_name, u.id]}) %>
<% end %>
答案 1 :(得分:0)
最简单的答案是使用sort
方法:
users_arr.sort
这将返回按每个条目的第一个元素排序的数组。
irb(main):129:0> users_arr
=> [["Watson", 1], ["Olson", 2], ["Peters", 3], ["Warren", 4]]
irb(main):130:0> users_arr.sort
=> [["Olson", 2], ["Peters", 3], ["Warren", 4], ["Watson", 1]]
您可以使用sort!
对数组进行排序,或使用sort
(不带!字符)来生成新的(已排序的)数组。
完整语法(例如,对每个条目的第二个元素进行排序)将使用<=>
运算符:
irb(main):132:0> users_arr
=> [["Olson", 2], ["Peters", 3], ["Warren", 4], ["Watson", 1]]
irb(main):133:0> users_arr.sort {|a,b| a[1] <=> b[1]}
=> [["Watson", 1], ["Olson", 2], ["Peters", 3], ["Warren", 4]]