我有3个用户角色,称之为标准,高级和管理员。每个人都可以发帖。高级版和管理员可以选择是发布私人帖子还是非私人帖子(私有:false或private:true)。标准用户将不会被选择选择他们的帖子是否是私人的;默认情况下,所有标准用户的帖子将具有私人:无状态。Ruby on Rails三元运算符显示零和虚假
总结:
- 标准用户帖子永远是私人:无
- 高级版/管理员用户帖子可以是私有的:真正的或私有:假
我想创建一个范围,以便在标准用户查看索引页面时,他们可以看到包含Private:nil和Private:false的帖子,而Premium和Admin用户可以查看所有帖子。我的问题是,我不能想出一个允许标准用户同时查看private:nil和private:false Posts的三元运算符。
这是我对Post模型:
scope :visible_to, -> (user) { user.admin? || user.premium? ? all : where(private: false) || where(private: nil)}
上面的代码只显示与私人帖子:假的。 我已经尝试过各种组合:
... where(private: false || nil)}
只显示私人:虚假职位
... where(private: nil || false)}
只显示私人:无帖子
... where(private: nil && false)}
只显示私人:无帖子
... where(private: false && nil)}
个显示私人:虚假职位
等几种组合 -
我还注意到,当我切换的虚假和无秩序,它会显示不同的结果。我以为||或& &运营商是非交换。也许有一些关于范围或三元运营商,我不知道...
谢谢!
你有没有考虑使用授权库,例如[权威人士](https://github.com/elabs/pundit)? – mysmallidea