1

我有一个包含 4 个模型、客户、项目、冲刺和任务的应用程序。我在数据库中显示所有任务的任务索引,我试图设置可排序的列,我实际上做到了,这是代码,我正在使用元搜索 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 不是,我想通过客户端名称对其进行排序。先谢谢了。

4

1 回答 1

2

根据此处的文档,您应该创建 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>

如果您已经在其他地方定义了连接并将它们包含在创建搜索的范围内,您可能会跳过自定义排序范围并使用如上所示的链接。

于 2012-10-22T22:06:22.773 回答