相关疑难解决方法(0)

Rails:如何获得至少一个孩子的对象?

在谷歌搜索,浏览SO和阅读之后,似乎没有一种Rails风格的方式来有效地仅获得Parent具有至少一个 Child对象(通过has_many :children关系)的那些对象.在纯SQL中:

SELECT *
  FROM parents
 WHERE EXISTS (
               SELECT 1
                 FROM children
                WHERE parent_id = parents.id)
Run Code Online (Sandbox Code Playgroud)

我最接近的是

Parent.all.reject { |parent| parent.children.empty? }
Run Code Online (Sandbox Code Playgroud)

(基于另一个答案),但它的效率非常低,因为它为每个答案运行一个单独的查询Parent.

activerecord ruby-on-rails

20
推荐指数
3
解决办法
8723
查看次数

ActiveRecord找到所有有关联孩子的父母

我不知道为什么我无法解决这个问题,我认为应该相当简单.我有两个型号(见下文).我正在尝试为SupplierCategory提出一个命名范围,该范围将找到所有SupplierCategory(s)(包括:供应商),其关联的供应商不是空的.

我尝试了一个直接加入,named_scope :with_suppliers, :joins => :suppliers它只给了我与供应商的类别,但它给了我每个类别单独列出,所以如果一个类别有2个供应商,我在返回的数组中获得两次类别:

目前我正在使用:

named_scope :with_suppliers, :include => :suppliers
Run Code Online (Sandbox Code Playgroud)

然后在我看来我正在使用:

<%= render :partial => 'category', :collection => @categories.find_all{|c| !c.suppliers.empty? } %>
Run Code Online (Sandbox Code Playgroud)

不完全雄辩,但说明了我想要实现的目标.

类定义

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

class Supplier < AR
  belongs_to :supplier
end
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails associations

10
推荐指数
1
解决办法
6531
查看次数

标签 统计

activerecord ×2

ruby-on-rails ×2

associations ×1