2011-07-27 23 views
19

Tôi muốn lấy tất cả các danh mục có chứa products có thể mua.Ruby/Rails - Tôi có thể sử dụng phạm vi (hoặc phương thức lớp) của bảng đã tham gia như một phần của mệnh đề WHERE của tôi không?

class Product < ActiveRecord::Base 
    belongs_to :category 
    scope :purchaseable, where(:available => true) 
end 

class Category < ActiveRecord::Base 
    has_many :products 
    scope :with_purchaseable_products, ????? 
end 

Vì vậy, tôi đang cố gắng xác định :with_purchaseable_products. Công trình này:

scope :with_purchaseable_products, joins(:products).where("products.available is true").group(:id).having('count(products.id) > 0') 

Nhưng điều đó không phải là rất khô. Có cách nào để áp dụng phạm vi :purchaseable của tôi cho products trong phạm vi :with_purchaseable_products của tôi không?

Cảm ơn.

Trả lời

36

Bạn nên sử dụng phương pháp hợp nhất

class Category < ActiveRecord::Base 
    has_many :products 
    scope :with_purchaseable_products, joins(:products).merge(Product.purchaseable).group(:id).having('count(products.id) > 0') 
end 

Tìm hiểu thêm về http://asciicasts.com/episodes/215-advanced-queries-in-rails-3

+0

Hai tài liệu tham khảo thêm: https://gorails.com/blog/activerecord-merge và http://apidock.com/ rails/ActiveRecord/SpawnMethods/merge – Miguelgraz

Các vấn đề liên quan