ruby
先show一段代码,用户只能看到一年内有更新且没有被隐藏的post
class User < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :user
default_scope {where('updated_at > ?', Time.now - 1.year).where(is_hidden: false)}
end
如果业务变更了,某类用户登录,可以看到隐藏的post,但是依旧只能看到一年内有更新的,可以这么写
class User < ActiveRecord::Base
has_many :posts
has_many :hidden_or_unhidden_posts, -> {unscope(where: :is_hidden)}, class_name: "Post"
end
这时候 User.find(1).hidden_or_unhidden_posts
将会看到隐藏的post
不过值得注意的是,unscope不会对SQL生效,比如加上unscope(where: :updated_at)
并不会对前面的 SQL 进行unscope
发表于 2019.06.27
© 自由转载 - 非商用 - 非衍生 - 保持署名