我的问题与此类似,但那里的答案都没有解决我的具体问题。
我想找到这样的对象:
conditions = {first_name: @search OR last_name: @search}
Stuff.where( conditions )
显然,这种语法是无效的,但它是我能想到的最简单的方法来显示我想要做什么。我想在复杂/复合条件下使用更简洁的哈希语法。
我知道你可以用这样的“纯字符串条件”手工写出来Stuff.where("first_name=#{@search} OR last_name=#{@search}")
……但这不是我想知道的。
更新看起来你可以用这样的数组做 OR Stuff.where( some_column: ["option1", "option2"])
:。知道这非常有用,但它并不能解决我的问题,因为我需要 OR 来应用于不同的 key=value 对......key=value OR key=value
不是key=value OR value
。
Update2我不想使用 SQL 字符串的原因是因为我需要分几部分构建查询,而且我不知道如何在仍然转义插入的变量的同时做到这一点。我没有测试过,但我假设这不起作用:
conditions = ["(project_id=? AND sent_to_api=1)", @project_id]
conditions = conditions + ["first_name=? OR last_name=?", @search, @search]
Stuff.where( conditions )
希望这是有道理的。有没有办法用 SQL 字符串语法做我需要的,同时仍然保留 Rails 的内置 SQL 转义?