首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 3查询接口:使用关联模型

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

Stack Overflow用户
提问于 2010-10-20 18:17:29
回答 2查看 1.2K关注 0票数 2

我将使用通用的博客示例。

代码语言:javascript
复制
class Post < ActiveRecord::Base
  has_many :comments
end
class Comment < ActiveRecord::Base
  belongs_to :post
end

在查询帖子时,如何访问其关联(即:评论)?

这应该是世界上最简单的事情,但我还没有找到任何关于它的文档。甚至http://edgeguides.rubyonrails.org/3_0_release_notes.html#query-interfacehttp://m.onkey.org/2010/1/22/active-record-query-interface也无能为力,基本上是说“现在有了像joins和includes这样的方法来做与SQL语句相同的事情。”好的谢谢。

下面是我想要做的非常简单的事情,它们不起作用,但我想要实现的目标应该是显而易见的:

代码语言:javascript
复制
Post.where(:comments.count >= 10)
Post.where(:comments.author_id == current_user.id)
Post.order(:comments.count)

我们如何才能在不求助于带有SQL臭味的ruby代码的情况下做到这一点(从而违背了活动记录的目的)?谢谢:)

EN

回答 2

Stack Overflow用户

发布于 2010-10-20 18:26:29

如果你在帖子上设置了评论的counter_cache,你可以直接看到它有多少评论,而不需要查询,这使得它更容易和更快。

这将解决您提出的第一个也是最后一个问题。

然后您可以像这样查询它们,

代码语言:javascript
复制
  Post.where(:comments_count >= 10)
  Post.order(:comments_count)

但您最好为此设置作用域。

我不确定你想对第二个问题做什么,你想显示当前用户评论过的所有帖子吗?

票数 0
EN

Stack Overflow用户

发布于 2010-10-20 18:53:56

Post.where(:comments.count >= 10)

代码语言:javascript
复制
Post.find(:all).select{|p| p.comments.count >= 10)

Post.where(:comments.author_id == current_user.id)

代码语言:javascript
复制
Post.find(:all).select{|p| p.comments.select{|c| c.author_id == current_user.id } }

Post.order(:comments.count)

代码语言:javascript
复制
Yikes, this one beats me.

嘿,另外,我的两篇帖子都是关于SQL的。我知道人们用一个

代码语言:javascript
复制
Post.find(:all, :conditions => blah blah blah..

但我不知道该怎么说。抱歉的。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3976771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档