【发布时间】:2010-10-20 10:17:28
【问题描述】:
我将使用通用博客示例。
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
end
查询 Post 时,如何访问其关联(即 :cmets)?
这应该是世界上最简单的事情了,但我还没有找到任何关于它的文档。甚至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 味道的 ruby 代码的情况下完成这些工作(从而违背了 Active Record 的目的)? 谢谢:)
【问题讨论】:
-
Post.includes("cmets").where(:cmets => {:author_id => current_user.id}) 似乎适用于第二个,尽管必须少一些 SQLish / 更多Railsish 的方法(即类似于我在问题中写它的方式)。由于类中的“has_many”方法调用,ARel 不应该要求我们在查询中使用 SQLish“include”方法。它至少应该这么聪明。
-
很高兴看到我两年半前的问题。现在这很容易。
标签: ruby-on-rails ruby-on-rails-3 associations arel