按字母顺序排列表格列

时间:2011-09-14 13:26:42

标签: ruby-on-rails ruby-on-rails-3

我有以下代码来显示用户在用户显示页面的表格中所做的任何评论。代码工作正常,表格显示所有用户注释和他们所属的许可证。目前显示的表按用户创建的顺序显示许可。我想安排表格,以便许可列按字母顺序显示,而不是在创建时显示。我不确定是否需要在控制器中调整此代码或其他内容。

  <% if @user.comments.exists? then %>

  <b>Comments:</b><br />
  <table>

  <tr>
<th>Permit</th>
<th>Comment</th>
  </tr>

  <% @user.comments.each do |comment| %>

  <tr>
      <td><%= link_to comment.permit.name, comment.permit %></td>
      <td><%= comment.body %></td>
  </tr>
  <% end %>
  </table>
  <% end %>

3 个答案:

答案 0 :(得分:1)

使用ActiveRecord order方法。

查看官方文档:http://guides.rubyonrails.org/active_record_querying.html#ordering

在你的情况下,这将是:

<% @user.comments.order('name').each do |comment| %>

答案 1 :(得分:0)

 > sorted_permits = @user.permits.sort

这为您提供了自然排序的许可列表(即,如果它们是字符串值,则按字母顺序排序,如果它们是数值,则它们从最低到最高排序)。您可以在视图中执行此操作,或者更常见的是在控制器中执行此操作。

所以,如果我有一份许可证清单,例如:

permits = ["Fishing", "Hunting", "Reading", "Driving"]

然后我可以做以下事情:

 > permits.sort
=> ["Driving", "Fishing", "Hunting", "Reading"]

请注意.sort按排序顺序返回列表的副本,而类似的.sort!修改原始列表,将其永久重新排序(在内存中),但不会更改数据库中许可的顺序/ ID。

请参阅:http://www.ruby-doc.org/core/classes/Array.html#M000244

答案 2 :(得分:0)

直接在关系定义上使用:order选项应该可以解决问题:

class Comment < ActiveRecord::Base
  has_many :permits, :order => 'name DESC'
end