Ruby on rails 3.2 Rails作用域返回所有关联都符合条件的记录
我在编写返回记录的作用域时遇到问题,其中所有的多个关联都符合一个条件 我有这些模型:Ruby on rails 3.2 Rails作用域返回所有关联都符合条件的记录,ruby-on-rails-3.2,named-scope,Ruby On Rails 3.2,Named Scope,我在编写返回记录的作用域时遇到问题,其中所有的多个关联都符合一个条件 我有这些模型: class Product has_many :listings end class Listing belongs_to :product belongs_to :issue end class Issue has_many :listings end 基本上,一个产品可以列在几个不同的问题。我希望能够得到所有的产品,没有在一个特定的问题清单。到目前为止,我的产品模型中有以下范围: sc
class Product
has_many :listings
end
class Listing
belongs_to :product
belongs_to :issue
end
class Issue
has_many :listings
end
基本上,一个产品可以列在几个不同的问题。我希望能够得到所有的产品,没有在一个特定的问题清单。到目前为止,我的产品模型中有以下范围:
scope :not_listed_in, lambda { |issue|
joins(:listings)
.where("listings.issue_id != ?", issue.id)
}
这不起作用,因为它会找到至少一个列表不在问题中的任何产品。我需要一些方法来询问特定问题中没有列表的所有产品。假设您使用的是ActiveRecord,您可以通过查找所有产品并删除问题中的产品来实现这一点。这通常会产生一个数组,所以在下面的代码中,我做了一个额外的数据库查询,让它返回一个作用域结果,这样您就可以将其他“where”子句级联到结果中
class Product < ActiveRecord::Base
has_many :listings
scope :not_listed_in, lambda { |issue|
id_list = Product.pluck(:id) - issue.products.pluck(:id)
Product.where(id:id_list)
}
end
class Listing < ActiveRecord::Base
belongs_to :product
belongs_to :issue
end
class Issue < ActiveRecord::Base
has_many :listings
has_many :products, through: :listings
end
类产品
我最后用#拒绝做了类似的事情,但我更喜欢这个。谢谢我更新了我的答案——我注意到一个很酷的AR方法——Pullc——它创建一个简单的DB查询,只获取一列并返回一个值数组——这正是这里需要的。