我无法通过我的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)
答案 0 :(得分:3)
试试这个............
@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))
希望这对你有用。
答案 1 :(得分:3)
尝试以下
@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))
答案 2 :(得分:3)
使用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的更多信息,这里有一些页面可以查看更多内容:
definitive guide to arel
using arel to compose sql queries
出于某种原因,我决定完全忽略你在跑道5的事实,在这种情况下,Akshay的回答/ Chakreshwar Sharma的第二个回答肯定是要走的路。
然而,我仍然建议学习并掌握AREL,它可以在许多其他可能有更复杂的查询要写的情况下提供帮助!
答案 3 :(得分:0)
您也可以这样使用:
# 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)