7

レールでスコープを正しく機能させるのに問題があります。

私のモデル:

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 に答える