Rails中的Active Record OR查询4

时间:2014-09-21 10:11:51

标签: ruby-on-rails ruby activerecord

我需要在Event对象的2列中找到用户ID,因此需要使用OR查询。 这样做的正确方法是什么? 下面的代码不起作用。

@event=Event.where((user_id= (current_user.id)) or (user2_id= current_user.id))

4 个答案:

答案 0 :(得分:5)

您可以使用

@event=Event.where("user_id= ? or user2_id = ?", current_user.id, current_user.id)

答案 1 :(得分:2)

我建议有一个更好的数据库结构,所以你不需要使用user#{N}_id来查找用户。

据推测,我会将你所拥有的表分成两个,每个表都有user_id。您可以粘贴一些代码,因此我可以帮助您。

第二点,似乎模型操作当前在Controller中完成,您可能希望将业务逻辑移动到模型中。

回答你的问题,你可以这样做:

  current_user_id = current_user.id
  query = "select * from events where user_id = #{current_user_id} or user2_id = #{current_user_id}"
  result = Event.connection.execute(query)

来源: http://apidock.com/rails/ActiveRecord/Core/connection

答案 2 :(得分:1)

写为

@event = Event.where("user_id = :uid or user2_id = :uid", {uid: current_user.id})

答案 3 :(得分:0)

如果您的目标是使用Rails 5,则可以使用OR here

Post.where("id = 1").or(Post.where("id = 2"))
# SELECT `posts`.* FROM `posts`  WHERE (('id = 1' OR 'id = 2'))

您不需要等待rails 5使用此OR查询。我们也可以将它与rails 4.2一起使用,感谢gem where-or