gpt4 book ai didi

sql - rails : query the existence of a join table's child

转载 作者:行者123 更新时间:2023-11-29 13:55:41 25 4
gpt4 key购买 nike

设置:

class User < ActiveRecord::Base
has_many :sales
has_many :sold_items, through: :sales, source: item
has_many :returns, through: sold_items
end

class Sale < ActiveRecord::Base
belongs_to :user
belongs_to :item
has_one :return
end

class Item < ActiveRecord::Base
has_many :sales
has_many :returned_sales, through: :sales, source: :return
end

class Return < ActiveRecord::Base
belongs_to :sale
end

问题:

编辑:澄清问题。我希望给定用户不会返回所有项目。

提示:项目可能有可能针对用户的销售范围:如果一个项目有两个销售,一个返回,一个不返回,我不想显示该项目。

user_items = user.sold_items.distinct
goal = user_items.reject {|i| i.returned_sales.first}

这不起作用,因为它查询所有 returned_sales 的项目,而不仅仅是用户范围内的项目。


编辑: 添加返回关联 has_one :returned_item,through: :sale, source: :item 和查询

returned_items = user.returns.map {|r| r.item}
goal = user_items - returned_items

有技巧但不够性感:首选单一查询。

最佳答案

特价:

def self.not_returned
where.not(Return.where("returns.sale_id = sales.id").exists)
end

然后你可以:

Sale.not_returned

关于sql - rails : query the existence of a join table's child,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32429908/

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