我想在一个模型中创建一个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
属性的同一级别(这会导致冲突,因为两个模型都有id
,created_at
等)。关于如何解决这个问题的任何想法?