繁体   English   中英

Rails-使用or子句编写where查询

[英]Rails - Writing a Where Query With an Or Clause

我在弄清楚如何使用Rails 5应用程序(mySQL)将查询合并为一个查询时遇到麻烦。 我希望@activities返回符合查询1或2的条件的活动记录。

有人可以帮帮我吗? 谢谢!

查询1

@activities = Activity.where(owner_id: current_user.friend_ids, owner_type: "User")

查询2

@activities = Activity.where(recipient_id: current_user.id)

尝试这个 ............

@activities =  Activity.where("(owner_id in = ? and owner_type = ?) or recipent_id = ?", current_user.friend_ids,"User",current_user.id )

对于Rails 5

@activities =  Activity.where(owner_id: current_user.friend_ids, owner_type: "User").or(Activity.where(recipient_id: current_user.id))

希望这对您有用。

试试下面

@activities =  Activity.where("(owner_id in = ? and owner_type = ?) or recipent_id = ?", current_user.friend_ids,"User",current_user.id )

要么

@activities =  Activity.where(owner_id: current_user.friend_ids, owner_type: "User").or(Activity.where(recipient_id: current_user.id))

使用AREL是执行OR或AND查询的好方法,它是获取所需SQL查询的一种更具编程性的方法,因为您可以构建它们并轻松地对其进行元编程,并且避免使用直接获得的SQL字符串大而复杂且难以阅读,但是以下是您的代码的片段,以帮助您继续前进:

table = Activity.arel_table
query = arel_table['owner_id'].in(current_user.friend_ids).and(arel_table['owner_type'].eq("User"))
query = query.or(arel_table['recipient_id'].eq(current_user.id))
@activities = Activity.where(query)

我强烈建议您查找有关使用AREL的更多信息,以下是一些页面,以了解更多信息:

竞技场权威指南
使用Arel编写sql查询

编辑

由于某种原因,我决定完全忽略您运行在5号滑轨这一事实,在这种情况下,Akshay的答案/ Chakreshwar Sharma的第二个答案肯定是正确的方法。

但是,我仍然建议您学习并掌握AREL,因为它确实可以在许多其他情况下提供帮助,这些情况下您可能需要编写更复杂的查询!

您也可以使用这种方式:

# load all ids for owner
activity_ids_by_owner = Activity.where(owner_id: current_user.friend_ids, owner_type: "User").pluck(:id)
# load all ids for recipient
activity_ids_by_recipient = Activity.where(recipient_id: current_user.id).pluck(:id)

# load all activities for founded ids
Activity.where(id: activity_ids_by_owner | activity_ids_by_recipient)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM