0

我有一堂课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

4 回答 4

1

ASC order

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

DESC order

<% @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 %>
于 2013-05-25T21:27:32.710 回答
1

您可以使用sort来比较username

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

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

在您的控制器中:

@users = User.order('username DESC')
于 2013-05-25T21:22:43.477 回答
0

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

@users = User.all  

你可以把它改成

@users = User.order(:username)  

现在不需要改变视图,它会是一样的

<% @users.each do |user| %>
<%= User.username %>, <%= user.password %> <br />
<% end %>
于 2013-05-26T05:53:16.123 回答
-1
<% @users.sort{|u1,u2| u1.username <=> u2.username).each do |user| %>
<%= user.username %>, <%= user.password %> <br />

请参阅sort文档。

于 2013-05-25T21:23:50.700 回答