我有一个包含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不是,我想通过客户端名称对其进行排序。 谢谢你提前。
答案 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>
如果您已在其他地方定义了连接并将其包含在创建搜索的范围内,则可以跳过自定义排序范围,并使用上面显示的链接。