- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个约会风格的应用程序,其中 User
可以批准其他用户。我使用 Approval
模型来跟踪这些关系。每个 Approval
都有一个 user_id
和一个 approved_id
-- 已批准的 User
的用户 ID。它还具有 rejected_at
,一个指示一个 User
已拒绝另一个的日期时间。
要向 current_user
显示符合条件的用户,我必须查询存在其中之一的用户
批准
关系Approval
仅与 approved_id
为 current_user.id
的关系(意味着符合条件的用户批准 current_user 但没有其他方式的关系周围Approval
和非零 rejected_at
属性的 User
,其中 approved_id
是 User
或 user_id
是 current_user
。我如何制作 ActiveRecord 查询来查找符合条件的用户?我知道我可以在 Approval
上执行 joins
但我也想说明 User
之间没有 Approval
关系>s!我认为只进行 2 个单独的查询可能更有意义,但我想知道是否可以合并为一个查询..
最佳答案
您想要的行为是 LEFT OUTER JOIN ,其中将包括来自 users
的行approvals
中是否有匹配行.这样,您将获得 User
没有发出 Approval
关于你的目标 User
,或者一个拥有并且我们可以过滤拒绝的人。
The query看起来像
-- Looking for users who either have no opinion or have approved user 1
SELECT *
FROM users
LEFT OUTER JOIN approvals
ON users.id = approvals.user_id
AND approvals.approved_id = 1 -- Filter for only approvals of user 1
WHERE users.id != 1 -- Ignore user 1
AND (
approvals.approved_id IS NULL -- Approving user has no opinion of user 1
OR approvals.rejected_at IS NULL -- Approving user has not rejected user 1
)
;
分片,
users LEFT OUTER JOIN approvals
考虑所有users
, 即使他们没有 approvals
ON users.id = approvals.user_id
对 users
与 approvals
他们创造了ON ... AND approvals.approved_id = 1
只考虑 approvals
对于 User 1
WHERE users.id != 1
只考虑其他 users
WHERE ... approvals.approved_id IS NULL
需要 users
没有创建任何 approvals
关于 User 1
.WHERE ... approvals.rejected_at IS NULL
需要 users
确实创造了一个Approval
对于 User 1
, 这不是拒绝 ActiveRecord
当我们翻译这个时并没有做任何特别漂亮的事情,但它有效:
class User < ActiveRecord::Base
def eligible_partners
User.joins( # Join like we did before
<<-SQL
LEFT OUTER JOIN approvals
ON users.id = approvals.user_id
AND approvals.approved_id = #{self.id}
SQL
).where.not(id: id) # Ignore ourselves
.where( # Filter for no approvals or a positive approval
<<-SQL
approvals.approved_id IS NULL
OR approvals.rejected_at IS NULL
SQL
)
end
end
如果你想要更易读的东西,你可以收集每个 User
的 ID已经拒绝给定的人,然后得到所有其他人 User
秒。一方面,这是两个查询;另一方面,它可能比 JOIN
便宜一旦您的表格变大,它就更容易理解。
def other_eligible_partners
rejecter_ids = Approval
.where(approved_id: id) # About ourselves
.where.not(rejected_at: nil) # Rejected us
.pluck(:user_id)
User.where.not(id: rejecter_ids + [id]) # People who didn't reject us
end
关于ruby-on-rails - DatingApp编程: ActiveRecord association for finding Users where there are no Approvals or one 1 way approvals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31277499/
export class UserListComponent implements OnInit{ users; constructor(private userService: UserS
我最近在我的系统中遇到了 Java 语言环境的问题,我试图用这个配置运行一个项目: -Duser.language=pt_BR -Duser.country=BR 谷歌搜索后,我找到了this sit
1 当我希望出现注册错误时,我的代码出现问题:管理器不可用; 'auth.User' 已替换为 'users.User' ,我尝试解决其他问题,与 Manager 不可用相同; 'auth.User'
Loopback 非常酷,但这是我迄今为止遇到的一个缺点,我真的不确定如何解决它。内置用户模型在我的 MongoDB 数据库中生成一个名为“User”的集合,当我尝试根据 Loopback.js 自己
我在 aws cognito 中有以下用户组。行政成员付费成员(member) 我想在所有用户注册我的应用程序时将所有用户默认分配到 Member 用户组,这样我就可以为该用户组分配不同的 IAM A
blogsIndex.blade.php @extends('layouts.default') @section('details')
我正在尝试在Rails 3开发环境中使用sqlite3而不是MySQL,但是遇到了问题。尝试执行rake db:migrate时,我得到: SQLite3::SQLException: no such
尝试使用 构建 API Phoenix v1.3 按照本教程: https://dreamconception.com/tech/phoenix-full-fledged-api-in-five-mi
我正在使用通过模板 cookie-cutter 创建的 Django。当我尝试在本地使用 docker 运行项目时,出现以下错误。 FATAL: password authentication fai
我正在尝试使用 node.js/adonis 创建新用户 我创建了这两个函数: const User = use("App/Models/User") async store ({ request,
我想安排一些事情,例如 GET 请求 http://example.com/user/foo@bar.com 内部调用脚本 /var/www/example.com/rest/user/GET.php
我是一名具有可用性工程背景的软件开发人员。当我在研究生院学习可用性工程时,其中一位教授有一句口头禅:“你不是用户”。我们的想法是,我们需要将 UI 设计基于实际的用户研究,而不是我们自己关于 UI 应
您好,我正在制作一个使用互联网发送消息的消息传递应用程序。我需要从用户 a 向用户 b 发出通知。 我使用这段代码: if (toUser!= nil){ parseMessage[@
在 ruby/ror 中你可以这样做: user = User.new(params[:user]) 它使用发布表单中的值填充新对象。 使用 django/python 可以完成类似的事情吗? 最
每当我编辑用户的角色时,用户都需要注销并重新登录以查看更改。提升用户时没有问题,因为他们在再次登录之前不会看到额外的权限。但是,当降级发生时,用户仍将保留其现有角色,这会带来安全风险。想象一下,撤销一
我的核心数据有线问题。使用 iOS 10 中的 Swift3,每次使用 获取或存储数据时,我都会获得托管对象上下文 func getContext () -> NSManagedObjectCont
我发现当我使用 users_path(user) 时它返回 /users.id 其中 id 是用户的 ID 但我希望它返回 /用户/ID。我的配置 routes.rb 如下所示。 # config/r
我的应用程序在我的测试设备上正常运行(当我通过 ADT 安装它时,当我通过导出的 APK 文件安装它时)但它在 Play Store 测试设备上失败并出现以下错误: Permission Denial
创建模型的第一个条目会抛出错误 我执行了以下命令进行迁移 manage.py makemigrations manage.py migrate 在我执行这些命令以在数据库中创建第一个“数据”之后,一切
我正在尝试实现一个 getter,但它在下面代码 fragment 的最后一行向我显示了这个错误。 代码是—— class AuthRepository extends BaseAuthReposit
我是一名优秀的程序员,十分优秀!