default_scope包含where和order以及如何覆盖它

时间:2015-08-29 09:52:17

标签: ruby-on-rails ruby-on-rails-4 activerecord

我有一个微博模型,我希望默认情况下每个查询都会附带where approved = trueorder by creat_at desc

现在这段代码不起作用

class Micropost < ActiveRecord::Base
  ...
  default_scope { where(approved: true), order('microposts.created_at DESC')}
end

另外我想知道如何绕过它?例如,如果我是管理员,并且我在未批准的视图中,我希望能够看到未经批准的帖子。

1 个答案:

答案 0 :(得分:1)

您的default_scope应为:

 default_scope { where(approved: true).order(created_at: :desc) }

要绕过默认范围,您可以使用unscoped

要查看unapproved帖子,您可以执行以下操作:

Micropost.unscoped.all.where(approved: false)