OR运算符和Ruby where子句

时间:2011-09-21 13:31:57

标签: ruby ruby-on-rails-3 activerecord

可能非常简单,但我无法在线查找有关此问题的文档 我在Ruby中有两个activerecord查询,我想通过OR运算符

连接在一起
@pro = Project.where(:manager_user_id => current_user.id )
@proa = Project.where(:account_manager => current_user.id)

我是ruby的新手,但我自己尝试使用||

@pro = Project.where(:manager_user_id => current_user.id || :account_manager => current_user.id)

这没有用,所以1.我想知道如何在Ruby和2中实际执行此操作。如果那个人也可以在这样的ruby语句中让我对布尔语法有所了解。 例如AND,OR,XOR ...

3 个答案:

答案 0 :(得分:9)

在这种情况下,您无法使用Hash语法。

Project.where("manager_user_id = ? OR account_manager = ?", current_user.id, current_user.id)

答案 1 :(得分:2)

您应该查看API文档并遵循惯例。在这种情况下,您可以将代码发送到where方法。

这应该有效:

@projects = Project.where("manager_user_id = '#{current_user.id}' or account_manager_id = '#{current_user.id}'")

这应该是安全的,因为我假设current_user的id值来自你自己的应用程序,而不是来自外部来源,例如表单提交。如果您使用意图在查询中使用的表单提交数据,则应使用占位符,以便Rails创建正确的转义SQL。

# with placeholders
@projects = Project.where(["manager_user_id = ? or account_manager_id = ?", some_value_from_form1, some_value_from_form_2])

当您将多个参数传递给where方法(带占位符的示例)时,Rails会将第一个参数视为SQL的模板。数组中的其余元素将在运行时被第一个元素(即模板)中使用的占位符数(?)替换。

答案 2 :(得分:1)

Metawhere可以进行OR操作,还有很多其他漂亮的东西。