相关疑难解决方法(0)

Rails 3 - 渴望加载条件

好的,我对这一点感到非常难过.我正在尝试构建按类别组织的已发布网页的菜单.

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
Run Code Online (Sandbox Code Playgroud)

Page.rb

belongs_to :category
Run Code Online (Sandbox Code Playgroud)

Page模型也有:is_published,所以我也试图对它进行过滤.我不愿意发布我的微弱查询尝试,但除了乞求更聪明的人之外,没有其他解决方案:

(自我是@current_website)

self.categories.includes(:children, :pages).where('pages.is_published = 1')
Run Code Online (Sandbox Code Playgroud)

这主要返回我需要的内容,但不返回没有发布页面的父类别.例如,如果我有:

Parent Category
- Published Page
- Child Category
-- Published Page
Run Code Online (Sandbox Code Playgroud)

失败的地方是我父母没有发布的页面,如下所示:

Parent Category
- Child Category
-- Published Page
- Child Category
-- Published Page
Run Code Online (Sandbox Code Playgroud)

在此先感谢任何帮助.我正在尽可能多地学习有关查询的内容,但我在这方面已经反对了.

更新:实现KandadaBoggu的建议已经产生了更好的结果,这被添加到Category.rb

  has_many :published_pages, :class_name => "Page",
                             :conditions => {:is_published => true}
Run Code Online (Sandbox Code Playgroud)

但是,使用以下内容时:

self.categories.where(:parent_id => nil).includes({:children => :published_pages},
                                                   :published_pages)
Run Code Online (Sandbox Code Playgroud)

我得到了我需要的结果,但我也得到了空的父类别(没有published_pa​​ges,没有已发布页面的子类别.例如:

- Parent …
Run Code Online (Sandbox Code Playgroud)

mysql ruby-on-rails rails-activerecord

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

活动记录:急切加载与参数的关联

我有以下型号:

class Rating < ActiveRecord::Base
  belongs_to :item
  belongs_to :user
end

class Item < ActiveRecord::Base
  has_many :ratings
end
Run Code Online (Sandbox Code Playgroud)

我想获取所有项目,以及特定用户的评级,以显示每个项目旁边的当前用户评级(如果存在!).

我试过了...

Item.includes(:ratings).where('ratings.user_id = ?', user_id)
Run Code Online (Sandbox Code Playgroud)

...但是没有给我没有评级的项目.

我的第一个想法是与参数的has_many关联,然后使用includes方法传递该参数.但这似乎并不存在.

如何在不执行N + 1查询或将所有实体加载到内存中的情况下,在参数上过滤所有帖子和预先加载的关联?

activerecord ruby-on-rails ruby-on-rails-3

5
推荐指数
1
解决办法
3516
查看次数