相关疑难解决方法(0)

为什么在Rails 3.1上使用带范围的合并方法不再有效?

我偶然发现了一篇关于Rails 3+范围的精彩文章:http://edgerails.info/articles/what-s-new-in-edge-rails/2010/02/23/the-skinny-on-scopes-formerly -named-范围/ index.html中

你可以在那里阅读(在'Crazy Town'部分),可以合并来自不同模型的范围,如下所示:

class User < ActiveRecord::Base

  scope :published, lambda {
    joins(:posts).group("users.id") & Post.published
  }
end
Run Code Online (Sandbox Code Playgroud)

它按预期工作,并允许您这样做:

User.published.to_sql
#=> SELECT users.* FROM "users"
#   INNER JOIN "posts" ON "posts"."author_id" = "users"."id"
#   WHERE (posts.published_at IS NOT NULL AND posts.published_at <= '2010-02-27 02:55:45.063181')
#   GROUP BY users.id
Run Code Online (Sandbox Code Playgroud)

我在我的Rails 3.1项目中尝试了这种方法,显然它已不再适用了.

所以我克隆了文章的Rails 3.0.0-beta1项目,看到我的眼睛说这些人没有说谎,事情按照他们说的方式工作.

然后我3.1了,现在我得到了:

ruby-1.9.2-p290 :003 > User.published.to_sql
  User Load (0.3ms)  SELECT "users".* FROM "users" INNER JOIN "posts" ON "posts"."author_id" = "users"."id" GROUP BY users.id
  Post Load …
Run Code Online (Sandbox Code Playgroud)

scopes ruby-on-rails-3 ruby-on-rails-3.1

11
推荐指数
1
解决办法
2837
查看次数