7

我在确定范围以在 Rails 中正常工作时遇到了一些麻烦。

我的模型:

class User < ActiveRecord::Base
  default_scope :conditions => 'users.deleted_at IS NULL'


class Feed < ActiveRecord::Base
  belongs_to :user, :foreign_key => :author_id

当我调用以下内容时:

feeds = Feed.includes(:user)

我想跳过用户的 default_scope。所以我尝试了:

feeds = Feed.unscoped.includes(:user)

但这并没有消除用户的范围。关于如何让它发挥作用的任何建议?谢谢

4

1 回答 1

17

您可以通过使用.unscoped块形式来完成此操作,如此处所述

User.unscoped do
  @feeds = Feed.includes(:user).all
end

请注意,是否应用默认范围取决于实际执行查询时您是否在块内。这就是为什么上面使用.all,强制执行查询。

因此,虽然上述方法有效,但这不会 - 查询在.unscoped块外执行,并且将应用默认范围:

User.unscoped do
  @feeds = Feed.includes(:user)
end
@feeds #included Users will have default scope
于 2013-01-21T20:04:16.180 回答