【发布时间】:2015-11-05 22:48:09
【问题描述】:
我有以下疑问:
user.all_memberships.where("user_id = ? OR invited_id = ?", user2.id, user2.id)
这就是我的membership 模型的样子:
#<Membership id: 4, family_tree_id: 3, user_id: 1, created_at: "2015-10-23 20:33:41", updated_at: "2015-10-23 20:33:41", relation: nil, invited_id: nil>
我希望查询还检查relation != nil....但不确定如何在传递给where 子句的SQL 中用引号表示。
换句话说,我希望它在user_id 或invited_id 列中检查user2.id 的存在。但是...relation 也必须不为零。
我该怎么做?
编辑 1
当我按照以下 Blindy 的建议进行以下查询时:
user.all_memberships.where("relation is not null and user_id = ? OR invited_id = ?", user2.id, user2.id)
它会生成这个查询,这似乎可以工作,但基于它生成的 SQL,我对此感到紧张。请注意该语句的第二个 AND 和第二部分。感觉它可能偶尔会返回误报。
(0.9ms) SELECT COUNT(*) FROM "memberships" WHERE (memberships.user_id = 1 OR memberships.invited_id = 1) AND (relation is not null and user_id = 2 OR invited_id = 2)
如何自定义 AR where 查询以更真实地执行我想要做的事情并且没有任何隐藏的陷阱?
【问题讨论】:
标签: sql ruby-on-rails postgresql ruby-on-rails-4 activerecord