[英]Sorting an index through an associated table?
我有一个索引,显示创建的所有当前“ dprojects”。 我正在努力能够单击表标题以按该参数对数据进行排序。 除了一栏,我已经全部工作了。 此列按分配给我们的客户数量显示客户。 例如,“客户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>
但这不起作用。 我想念什么? 感谢您的协助!
我想这是因为没有这样的列( 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
不明确,因为对我而言,两个模型中都存在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 %>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.