我有一个模型(记录)中的项目列表,这些项目引用了另一个模型(公司)中的列。在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>
答案 0 :(得分:1)
以下是您要找的内容:
Record.includes(:company).order('companies.name') # no need to call `all`
答案 1 :(得分:1)
试试这个:
Record.joins(:company).merge(Company.order(:name))