在rails中排序嵌套属性列

时间:2012-10-22 20:47:14

标签: ruby-on-rails sorting

我有一个包含4个模型的应用程序,客户端,项目,Sprint和任务。 我在db中显示了所有tak的任务索引,我试图设置可排序的列,我实际上已经创建了它,这里是代码,我使用metasearch gem。

<%- model_class = Task.new.class -%>
<h1><%=t '.title', :default => model_class.model_name.human.pluralize %></h1>
<table class="table">
 <thead>
   <tr>
     <th><%= sort_link @search, :id %></th>
     <th><%= sort_link @search, :client_id%></th>
     <th><%= sort_link @search, :name %></th>
     <th><%= sort_link @search, :description %></th>
     <th><%= sort_link @search, :status %></th>
     <th><%= sort_link @search, :created_at %></th>
   </tr>
  </thead>
 <tbody>
   <% @tasks.each do |task| %>
     <tr onclick="location.href='<%= sprint_task_path(task.sprint_id,task) %>'">
       <td><%= task.id %></td>
       <td><%= task.sprint.project.client.name %></td>
       <td><%= link_to task.name, sprint_task_path(task.sprint_id,task) %></td>
       <td><%= task.description %></td>
       <% if task.status == nil %>
       <td> Incompleta</td>
       <%else%>
       <td> Completa</td>
       <%end%>
       <td><%= task.created_at %></td>
     </tr>
   <% end %>
 </tbody>

这是有效的,但是在第二列中,client_id不是,我想通过客户端名称对其进行排序。 谢谢你提前。

1 个答案:

答案 0 :(得分:2)

根据文档here,您应该创建2个处理排序逻辑的新范围:

scope :sort_by_client_name_asc, joins(:client).order('clients.name ASC')
scope :sort_by_client_name_desc, joins(:client).order('clients.name DESC')

然后您可以使用此排序链接代码:

<th><%= sort_link @search, :client_name %></th>

如果您已在其他地方定义了连接并将其包含在创建搜索的范围内,则可以跳过自定义排序范围,并使用上面显示的链接。