所以我有一个简单的范围:
scope :visible_to, -> (user) {user && (user.premium? || user.admin?) ? all : where(:private => false || nil) }
这个想法是,如果用户角色等于Premium
或Admin
,它会显示(在索引上)私人和公开帖子的列表。当我以管理员或高级版登录时,似乎工作正常。但是,如果我没有以Standard
用户身份登录或登录(默认角色),则仅显示零帖子。如何使其适用于标准用户和访客用户?
答案 0 :(得分:1)
试试这个
scope :visible_to, -> (user) {(user && (user.premium? || user.admin?)) ? all : where(:private => [false,nil]) }
答案 1 :(得分:1)
如果我理解正确,你想展示
的帖子private
设置为false
或nil
所以你可以试试这个:
class Post
scope :visible_to, -> (user) do
return all if user && (user.premium? || user.admin?)
where(private: [false, nil])
end
end
一些建议/想法:
private
为真或假,不允许为零。将简化所有查询private
属性。它可能会与ruby本身的private
关键词混淆检查它的另一种方法有点另一种方式。在admin / premium:
时,始终显示false
和nil
并添加true
class Post
scope :visible_to, ->(user) do
values = [false, nil]
values << true if (user.try!(:premium?) user.try!(:admin?))
where(private: values)
end
end
答案 2 :(得分:0)
这样Users.visible_to
将返回高级用户和管理员用户。
scope :visible_to, -> (user) do
where(users.premium? = ? OR users.admin? = ?, true, true)
end