使用ActiveRecord条件在相关模型中按字段排序

Dre*_*rew 6 ruby ruby-on-rails rails-activerecord

我试图通过Rails中相关模型中的字段进行排序.如果相关模型被另一个参数过滤,我研究过的所有解决方案都没有解决?

物品模型

class Item < ActiveRecord::Base
  has_many :priorities
Run Code Online (Sandbox Code Playgroud)

相关型号:

class Priority < ActiveRecord::Base
  belongs_to :item

  validates :item_id, presence: true
  validates :company_id, presence: true
  validates :position, presence: true
end
Run Code Online (Sandbox Code Playgroud)

我正在使用where子句检索Items:

@items = Item.where('company_id = ? and approved = ?', @company.id, true).all
Run Code Online (Sandbox Code Playgroud)

我需要通过相关表格中的"位置"列进行排序.问题在于,在优先级模型中,可以列出多个公司的项目.所以这些职位取决于他们拥有哪家公司.当我显示项目时,它是针对一家公司,按公司内部的位置排序.完成此任务的正确方法是什么?任何帮助表示赞赏.

PS - 我知道acts_as_list然而发现它不太适合我的设置,所以我手动处理保存排序,同时仍然使用jquery ui sortable.

Jas*_*uck 9

您可以使用该includes方法包含构建关联,然后按顺序排序.你只要确保你消除歧义您订购的领域,有一些事情你应该读了这里的预先加载.所以它可能是这样的:

@items = Item.includes(:priorities).where('company_id = ? and approved = ?', @company.id, true).order("priorities.position ASC")
Run Code Online (Sandbox Code Playgroud)