我将使用通用博客示例。
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
end
查询Post时,如何访问其关联(即:注释)?
这应该是世界上最简单的事情,但我还没有找到任何文件。即使http://edgeguides.rubyonrails.org/3_0_release_notes.html#query-interface和http://m.onkey.org/2010/1/22/active-record-query-interface也没有帮助,基本上说“现在有像连接这样的方法,包括与SQL语句做同样的事情。”是的,谢谢。
所以这里有我想要做的非常简单的事情,哪些不起作用,但显而易见的是我想要完成的事情:
Post.where(:comments.count >= 10)
Post.where(:comments.author_id == current_user.id)
Post.order(:comments.count)
我们怎样才能在不诉诸于SQL的恶意代码(从而破坏Active Record的目的)的情况下做到这些? 谢谢:))
答案 0 :(得分:0)
如果您在帖子上为评论设置了counter_cache,则无需查询即可直接查看其评论数量,这样可以更轻松,更快捷。
这会照顾你提出的第一个也是最后一个问题。
然后您可以像这样查询它们,
Post.where(:comments_count >= 10)
Post.order(:comments_count)
但你最好为此设置范围。
我不确定你想要用第二个问题做什么,你想显示当前用户评论过的所有帖子吗?
答案 1 :(得分:-1)
Post.where(:comments.count&gt; = 10)
Post.find(:all).select{|p| p.comments.count >= 10)
Post.where(:comments.author_id == current_user.id)
Post.find(:all).select{|p| p.comments.select{|c| c.author_id == current_user.id } }
<强> Post.order(:comments.count)强>
Yikes, this one beats me.
嘿,我的两篇文章对SQL有点重要。我知道人们用
来更加优雅Post.find(:all, :conditions => blah blah blah..
但我不知道该怎么做。遗憾。