class Comment < ActiveRecord::Base
belongs_to :post
belongs_to :user
end
class Post < ActiveRecord::Base
has_many :comments
belongs_to :user
end
class User < ActiveRecord::Base
has_many :posts
has_many :comments
end
我正在尝试提取Post数据,同时也急切加载User和Comment数据,但是没有加载已被阻止的注释的限制(Comment表中的TINYINT字段)。当有评论时,以下内容有效,但是当我加载没有任何评论的帖子时,它会导致问题:
@post = Post.find(params[:id],
:include => {:comments => :user},
:conditions => "comments.blocked = 0")
有关如何运行此查询的任何建议,以便在没有注释时它可以工作吗?感谢。
答案 0 :(得分:0)
当您尝试在没有评论的帖子上执行此操作时会出现什么错误?
更新
这种变化怎么样?
@post = Post.find(params[:id],
:include => {:comments => :user},
:conditions => {:comments => {:blocked => false}})
急切加载协会的条件有点不同寻常。也许您应该使用:joins选项代替?或者跳过急切加载帖子(因为它只是一个帖子),并且在视图中使用了非阻止评论的命名范围。也许是这样的事情:
@post = Post.find(params[:id])
@comments = @post.comments.where(:blocked => false).all(:include => :user)
(只需在这里输入袖口,不确定这是非常合适的语法)
答案 1 :(得分:0)
好的,所以经过一些摆弄,这是答案(这对某些人来说似乎很明显,但MySQL中的count()函数让我感到悲伤):
@post = Post.find(params[:id],
:include => {:comments => :user},
:conditions => "comments.blocked = 0 OR posts.comments_count = 0")
comments_count是一个counter_cache字段,因此我开始明确使用MySQL count()函数。感觉就像一个kludge,但现在我很好。如果有人有更优雅的解决方案,请告诉我!