[英]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的更多信息,以下是一些页面,以了解更多信息:
由于某种原因,我决定完全忽略您运行在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.