【发布时间】:2016-01-23 15:51:38
【问题描述】:
我很难理解如何在我的 Rails 应用程序中定义范围/类方法。
基本上,这是我希望它执行的查询:
self.visible(current_user) -> {
@requests.where.not(visible==group && (request.user.group !=
current_user.group))}
基本上,这是一个用户可以发布帖子/请求的网站,但我希望发布者能够限制帖子的可见性(即,如果他们选择了可见 =“组”的选项,那么其他该组之外的用户看不到它(只有共享同一“组”的用户才能看到该帖子)。
请帮助我了解语法,我不知道如何在 WHERE 语句中使用 AND 条件。
现在,我有:
scope :visible, -> (group) { joins(:user).where.not(visible: 'group',
users:{group: group}).references(:users)}
返回的结果与我想要的相反。 但是,当我删除 not 时,它不会给我任何东西。
谢谢。
【问题讨论】:
-
你们的模型之间是什么关系?在迄今为止编写的范围中,您引用了一个组和用户对象,但我不确定范围是在哪里定义的,以及它与其他模型的关系。
-
其实在user表中有user.group(其中group引用了组名作为字符串)。现在很简单,我让用户将组作为字符串提供 - 组没有单独的列)。在请求表中,我有 request.visible,用户/发布者将选择它作为“可见性组”。即,作为海报,我可能是一个名为“摇滚乐队”的组的一员,我输入“摇滚乐队”作为组 (user.group = '摇滚乐队'),我的 request.visible = 组,所以控制器需要识别 request.visible = group 并允许摇滚乐队成员看到它。
-
对不起,范围在请求模型中。我希望能够排除海报表明只有同一组的成员(通过字符串命名)才能看到它的请求。
标签: ruby-on-rails class methods named scopes