Почему использование метода слияния с областями видимости больше не работает в Rails 3.1?

Я споткнулся после замечательной статьи о областях видимости в Rails 3+: http://edgerails.info/articles/what-s-new-in-edge-rails/2010/02/23/the-skinny-on-scopes- ранее названный-scope / index.html

Вы можете прочитать там (в разделе «Сумасшедший город»), что можно объединять прицелы из разных моделей следующим образом:

class User < ActiveRecord::Base

  scope :published, lambda {
    joins(:posts).group("users.id") & Post.published
  }
end

который работает так, как ожидалось, и позволяет вам делать:

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

Я пробовал этот подход в моем проекте 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 (0.2ms)  SELECT "posts".* FROM "posts" WHERE (posts.published_at IS NOT NULL AND posts.published_at <= '2011-10-05 11:45:00.512231')
  User Load (0.1ms)  SELECT "users".* FROM "users" 
NoMethodError: undefined method `to_sql' for []:Array
  from (irb):3
  from /home/jerefrer/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.0/lib/rails/commands/console.rb:45:in `start'
  from /home/jerefrer/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.0/lib/rails/commands/console.rb:8:in `start'
  from /home/jerefrer/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.0/lib/rails/commands.rb:40:in `'
  from script/rails:9:in `require'
  from script/rails:9:in `
'

==> Больше не работает.

И это меня огорчает, потому что слияние областей видимости было потрясающим, и теперь я не могу быть таким СУХИМ, как хочу.

Знаете ли вы:

  • Что произошло между двумя версиями?
  • Есть ли другой способ сделать то же самое?

11
задан Prince John Wesley 5 October 2011 в 11:57
поделиться