gpt4 book ai didi

ruby-on-rails - ActiveRecord查找具有关联 child 的所有 parent

转载 作者:行者123 更新时间:2023-12-03 11:11:12 24 4
gpt4 key购买 nike

我不知道为什么我不能弄清楚,我认为这应该很简单。我有两个模型(见下文)。我正在尝试为SupplierCategory命名一个范围,该范围将发现与供应商相关联的所有SupplierCategory(包括:suppliers)都不为空。

我尝试了一个简单的联接named_scope :with_suppliers, :joins => :suppliers,它只给我提供与供应商有关的类别,但它给了我每个类别分别列出的内容,因此,如果一个类别有2个供应商,则在返回的数组中两次获得该类别:

目前,我正在使用:

named_scope :with_suppliers, :include => :suppliers

然后我认为我正在使用:
<%= render :partial => 'category', :collection => @categories.find_all{|c| !c.suppliers.empty? } %>

并不 Eloquent ,但说明了我正在努力实现的目标。

类定义
class SupplierCategory < AR
has_many :suppliers, :order => "name"
end

class Supplier < AR
belongs_to :supplier
end

最佳答案

这是另一种方法:

named_scope :with_suppliers, :include    => :suppliers, 
:conditions => "suppliers.id IS NOT NULL"

之所以可行,是因为Rails对 OUTER子句使用了 include JOIN。当找不到匹配的行时,查询将为供应商列返回NULL值。因此, NOT NULL检查返回匹配的行。

Rails 4
scope :with_suppliers, { includes(:steps).where("steps.id IS NOT NULL") }

或使用静态方法:
def self.with_suppliers
includes(:steps).where("steps.id IS NOT NULL")
end

注意:

该解决方案渴望使供应商满意。
categories = SupplierCategory.with_suppliers
categories.first.suppliers #loaded from memory

关于ruby-on-rails - ActiveRecord查找具有关联 child 的所有 parent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2737073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com