我有一个索引,显示创建的所有当前“ dproject”。我正在努力能够单击表标题以按该参数对数据进行排序。除了一栏,我已经全部工作了。此列按分配给我们的客户数量显示客户。例如,“客户A”为“ 008”。 “ dprojects”表的一列是客户ID,“ schools”表的一列是ID和客户的实际姓名。
因为它是一个“ dprojects”索引,所以该表是按与客户关联的ID而不是客户名称进行排序的。如何获得按名称按字母顺序排序的信息?这是我的代码:
视图:(dname是学校模型内的客户名称)
<table>
<thead>
<tr style="border-bottom: 2px solid black;">
<th> <%= sortable "scode", "School" %></th>
</tr>
</thead>
<tbody>
<% @dprojects.where.not(status: "Completed").each do |dproject| %>
<tr>
<td width="20%" class="dotted"><%= dproject.school.dname[0,25] + "..." %></td>
</tr>
<% end %>
</tbody>
</table>
型号:
class Dproject < ActiveRecord::Base
belongs_to :school, foreign_key: 'scode'
end
控制器:
def index
@dprojects = Dproject.order(params[:sort])
respond_with(@dprojects)
end
助手:
module DprojectsHelper
def sortable(column, title = nil)
title ||= column.titleize
link_to title, :sort => column
end
end
我认为我可以用以下行修改视图:
<th> <%= sortable "dproject.school.dname", "School" %></th>
但这不起作用。我想念什么?感谢您的协助!
答案 0 :(得分:0)
我想是因为dproject.school.dname
中没有这样的列(@dprojects
)。您需要连接表才能访问模型School
的列。
我在模型Book
Author
上测试了排序,其中Book
belongs_to :author
与您的模型非常相似。为了使排序有效,我确实喜欢以下内容:
在控制器中有一个联接表,请注意别名(AS):
sort_by = params[:sort] || 'author_name'
@books = Book.joins(:author).select('books.name AS book_name, authors.name AS author_name').order(sort_by)
我使用sort_by
来避免列name
的模棱两可,因为对我来说,两个模型中都有名称列。
然后查看:
<p>id | <%= sortable 'book_name', 'Book' %> | <%= sortable 'author_name', 'Author' %></p>
<% @books.each do |book| %>
<p><%= book.book_name %> | <%= book.author_name %> </p>
<% end %>