如何通过`each`输出数据并对其进行排序?

时间:2013-05-25 21:17:33

标签: ruby-on-rails ruby sqlite

我有一个班级User

class user class User < ActiveRecord::Base
  attr_accessible :username, :password
end

我的数据库中还有三个用户:

id username password
1    user5    pw5
2    user3    pw3
3    user2    pw2

我的观点如下:

<% @users.each do |user| %>
  <%= User.username %>, <%= user.password %> <br />
<% end %>

输出数据按用户的行ID进行排序:

user5, pw5
user3, pw3
user2, pw2

如何输出按username排序?

user2, pw2
user3, pw3
user5, pw5

4 个答案:

答案 0 :(得分:1)

您可以使用sortusername进行比较:

@users.sort { |x, y| x.username <=> y.username }.each do |user|
  # Your code
end

此外,假设您使用ActiveRecord从数据库中提取记录,您还可以使用order进行查询,这将是一个更好的选择,因为数据库旨在处理这种类型的事情。 :d

在您的控制器中:

@users = User.order('username DESC')

答案 1 :(得分:1)

ASC订单

<% @users.sort_by{|e| e[:username]}.each do |user| %>
  <%= user.username %>, <%= user.password %> <br />
<% end %>

DESC订单

<% @users.sort_by{|e| e[:username]}.reverse.each do |user| %> <!-- or you can use @users.sort_by{|e| -e[:username]} -->
  <%= user.username %>, <%= user.password %> <br />
<% end %>

答案 2 :(得分:0)

在控制器中我认为你的代码就像

@users = User.all  

您可以将其更改为

@users = User.order(:username)  

现在无需更改视图,它将是相同的

<% @users.each do |user| %>
<%= User.username %>, <%= user.password %> <br />
<% end %>

答案 3 :(得分:-1)

<% @users.sort{|u1,u2| u1.username <=> u2.username).each do |user| %>
<%= user.username %>, <%= user.password %> <br />

请参阅sort文档。