Rails通过范围聚合父模型

时间:2017-08-04 17:29:47

标签: ruby-on-rails activerecord scope

我想在一个模型中创建一个Rails范围,它允许我通过范围“选择”作为父模型。例如:

class Item < ApplicationRecord
  belongs_to :parent
  scope :include_parent, -> { # code to include parent as 'custom_col_name' }
end

class Parent < ApplicationRecord
  has_many: items
end

因此,我应该能够做到这样的事情:

Item.include_parent.first

得到:

{
  id: 1,
  custom_col_name: {
    id: 2
  }
}

我知道这可以通过控制器做类似的事情来实现:

Item.includes(:parent).as_json

但我希望能够从模型中做到这一点。

---- ---- EDIT

通过这样做,我设法创建了一个包含父模型属性的范围:

  scope :include_parent, -> { Item.joins(:parent).select('items.*, parents.* as custom_col_name') }

我唯一剩下的问题是parent属性不在custom_col_name内,而是在item属性的同一级别(这会导致冲突,因为两个模型都有idcreated_at等)。关于如何解决这个问题的任何想法?

0 个答案:

没有答案