我有以下代码来显示用户在用户显示页面的表格中所做的任何评论。代码工作正常,表格显示所有用户注释和他们所属的许可证。目前显示的表按用户创建的顺序显示许可。我想安排表格,以便许可列按字母顺序显示,而不是在创建时显示。我不确定是否需要在控制器中调整此代码或其他内容。
<% 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 %>
答案 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。
答案 2 :(得分:0)
直接在关系定义上使用:order
选项应该可以解决问题:
class Comment < ActiveRecord::Base
has_many :permits, :order => 'name DESC'
end