如何在rails查询中将数组作为参数传递?

时间:2015-03-11 04:48:15

标签: ruby-on-rails ruby

我正在尝试执行下面的查询,但是我收到了错误。

Event.where("id IN ? and event_start_date > ?",[1, 2],Time.now)

我收到如下错误:

SELECT "events".* FROM "events" WHERE (id IN 1,2 and event_start_date > '2015-03-11 04:40:43.819487')
PG::SyntaxError: ERROR:  syntax error at or near "1"
LINE 1: SELECT "events".* FROM "events" WHERE (id IN 1,2 and event_s...

参数值不被视为数组。

4 个答案:

答案 0 :(得分:4)

您遇到语法错误。我认为你可以让你的代码更容易阅读,这有助于防止这种错误:

Event.where({ id: [1, 2], event_start_date: Time.now })

在此格式中,您将哈希传递给where idevent_start_date作为哈希键,[1, 2](数组)和Time.now作为值

这更易读,也更容易调试。

答案 1 :(得分:3)

对于数组参数和范围操作的组合,我会这样做,因为我发现它更具可读性:

Event.where(id: [1, 2]).where("event_start_date > ?", Time.now)

答案 2 :(得分:1)

@sank:你的错误给出了答案

您的查询中存在语法错误...

而不是这个

Event.where("id IN ? and event_start_date > ?",[1, 2],Time.now)

试试这个:

Event.where("id IN (?) and event_start_date > (?)",[1, 2],Time.now)

把()放在旁边?。

答案 3 :(得分:0)

Event.where("id IN(?) AND event_start_date < (?)", [1,2,3], Time.now)

您错过了标记符号周围的()