如何按引用名称而不是column_id进行排序

时间:2016-10-10 17:33:46

标签: ruby-on-rails ruby sorting

我有一个模型(记录)中的项目列表,这些项目引用了另一个模型(公司)中的列。在Records中,我使用company_id来引用关联公司。但是,当我排序时,我不想使用record.company_id,而是使用record.company.name。在我的控制器中,我使用它来获取company_id上的排序:

@records = Record.all.order("company_id ASC")

通过company_id对它们进行排序可以正常工作,但我希望按相关名称对它们进行排序。但是,当我执行以下操作时,我得到一个名称未定义的方法错误,我知道这不是正确的语法。

@records = Record.all.order(:company.name)

问:我如何按相关公司名称进行排序?

以下是我的一些相应代码:

记录模型

class Record < ActiveRecord::Base
  belongs_to :company
end

公司模式

class Company < ActiveRecord::Base
  has_many :records
end

记录控制器(声明不正确)

class RecordsController < ApplicationController
  def index
    @records = Record.all.order(:company.name)
  end
...
end

公司控制人员

class CompaniesController < ApplicationController
  def index
    @companies = Company.all
  end
...
end

记录索引视图

...
<% @records.each do |record| %>
  <tr>
    <td><%= record.company.name %></td>

2 个答案:

答案 0 :(得分:1)

以下是您要找的内容:

Record.includes(:company).order('companies.name') # no need to call `all`

查看Active Record Query Interface Giude了解详情。

答案 1 :(得分:1)

试试这个:

Record.joins(:company).merge(Company.order(:name))