如何在rails中定义命名范围/类查询

时间:2015-10-24 01:50:20

标签: ruby-on-rails class methods named scopes

我很难理解如何在我的Rails应用程序中定义范围/类方法。

基本上,这是我希望它做的查询:

self.visible(current_user) -> {
@requests.where.not(visible==group && (request.user.group != 
current_user.group))}

基本上,它是一个用户可以发布帖子/请求的网站,但我希望海报能够限制帖子的可见性(即,如果他们选择了visible =“group”的选项,那么其他该组之外的用户无法看到它(只有共享相同“组”的用户才能看到该帖子)。

请帮我解释语法,我无法弄清楚如何在WHERE语句中使用AND条件。

现在,我有:

scope :visible, -> (group) { joins(:user).where.not(visible: 'group', 
users:{group: group}).references(:users)}

返回与我想要的相反的东西。 但是,当我删除not时,它不会给我任何东西。

感谢。

1 个答案:

答案 0 :(得分:0)

我认为你正在寻找的是这个。

scope :visible, -> (group) { joins(:user).where("visible <> 'group' OR (visible = 'group' AND users.group = ?)", group) }