繁体   English   中英

通过关联表对索引进行排序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM