Được rồi, tôi hoàn toàn bối rối về điều này. Tôi đang cố gắng xây dựng một menu các trang web được xuất bản được sắp xếp theo danh mục.Rails 3 - Eager tải với các điều kiện
Category.rb:
belongs_to :parent, :class_name => "Category", :foreign_key => "parent_id"
has_many :children, :class_name => "Category", :foreign_key => "parent_id"
has_many :pages, :documents, :galleries
Page.rb
belongs_to :category
trang Mô hình cũng đã: is_published, vì vậy tôi đang cố gắng để lọc trên đó là tốt. Tôi miễn cưỡng gửi nỗ lực truy vấn yếu ớt của tôi, nhưng thấy không có giải pháp nào khác ngoài việc cầu xin mọi người thông minh hơn nhiều:
(tự là @current_website)
self.categories.includes(:children, :pages).where('pages.is_published = 1')
này trả phần lớn những gì tôi cần, nhưng không phải là chuyên mục không có trang được xuất bản. Ví dụ, nó hoạt động tuyệt vời nếu tôi có:
Parent Category
- Published Page
- Child Category
-- Published Page
Trường hợp thất bại là khi tôi không có trang được xuất bản trong các phụ huynh, như thế này:
Parent Category
- Child Category
-- Published Page
- Child Category
-- Published Page
Cảm ơn trước sự giúp đỡ nào về vấn đề này. Tôi đang cố gắng tìm hiểu càng nhiều càng tốt về các truy vấn, nhưng tôi chống lại bức tường về điều này.
UPDATE: đề nghị thực hiện KandadaBoggu đã mang lại kết quả tốt hơn, điều này đã được thêm vào Category.rb
has_many :published_pages, :class_name => "Page",
:conditions => {:is_published => true}
Tuy nhiên, khi sử dụng như sau:
self.categories.where(:parent_id => nil).includes({:children => :published_pages},
:published_pages)
tôi nhận được kết quả tôi cần, nhưng tôi cũng nhận được Danh mục gốc trống (không có publication_pages, không có danh mục con với các trang đã xuất bản. Ví dụ:
- Parent Category
-- Published Page
- Parent Category
-- NOTHING
Khắc phục tạm thời của tôi là nối thêm truy vấn với:
reject{|category| category.pages.empty? && category.children.empty?}
Cảm ơn bạn đã giúp đỡ.
Cảm ơn đã xuất sắc nhất ghi-up, liên kết và giải thích, KandadaBoggu! Điều này chắc chắn đã đặt tôi vào đúng con đường, tôi vẫn gặp sự cố với self.categories.includes (: children =>: published_pages,: published_pages) cung cấp cho cha mẹ không có trang hoặc danh mục con với trang. THANKS LẠI! – TMB
Cập nhật câu hỏi của bạn và chỉ định yêu cầu của bạn với sự hiện diện/vắng mặt của các trang. –
Fantasicly hữu ích cảm ơn bạn - đã được kéo tóc của tôi ra – jpwynn