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である2番目の列では機能しておらず、クライアント名で並べ替えたいと思います。よろしくお願いします。

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 に答える