2012-10-22 166 views
1

我有一個包含4個模型,客戶端,項目,Sprint和任務的應用程序。 Im顯示任務索引與db中的所有taks,即時嘗試設置可排序的列,我實際上做到了,這裏是代碼,即時通訊使用metasearch gem。在rails中排序嵌套屬性列

<%- 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

我想你應該使用JavaScript來做到這一點。看看這個http://tablesorter.com/docs/#Demo更好的原因有很多,其中一個原因是它的速度更快,因爲每當你對錶格進行排序時,你都沒有去過數據庫 –

+0

他可能正在使用某種分頁,所以,js排序不適合。我認爲 –

+0

只是一個小小的評論,爲了獲得標題,而不是創建一個類的實例,然後詢問該類,只需編寫「Task.model_name.human_name.pluralize」。 – nathanvda

回答

2

按照文檔here,您應該創建一個處理排序邏輯2個新的領域:

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

如果您已經定義:

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

然後你就可以使用這種鏈接代碼在其他地方加入並將它們包括在創建搜索的範圍中時,您可能會跳過自定義排序範圍,並使用上面顯示的鏈接。