Rails 3查询接口:使用关联模型

时间:2010-10-20 10:17:29

标签: ruby-on-rails ruby-on-rails-3 associations arel

我将使用通用博客示例。

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-interfacehttp://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的目的)的情况下做到这些? 谢谢:))

2 个答案:

答案 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..

但我不知道该怎么做。遗憾。