Rails在实用创建的where子句中删除字符串引号

时间:2014-10-02 14:28:34

标签: ruby-on-rails

我在Rails应用程序中编写用户定义的视图。我有一个名为uvcondtions的表,其中包含列(field_name),条件(条件),并与(ucompare)信息进行比较。

例如:

Field_name = description

ucondition = like

ucompare =卡车

变成where table_name.description like "Truck"

它适用于大多数PG SQL条件。 in条件无效。

如果我在uvconditions记录中有这个:

field_name = id

uvcondition = in

uvcompare =(1,3)

我收到此错误:

PG ::错误:错误:语法错误在或附近" '(1,3)' " 第1行:... sts"在哪里" worequests"。" tenant_id" = 1 AND(id在'(1,3)')

这是创建where子句的语句:

uvc = uvcondition.ucompare if uvcondition.ucondition == 'in'
@worequests = Worequest.where( uvcondition.field_name + " " + uvcondition.ucondition + " ?",  uvc )

有没有办法删除uvc ??

周围的引号

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

发生错误,因为 uvc实际上是一个字符串:

uvc = "(1,3)"

在SQL查询中使用它之前,误导Rails清理此字符串(puttin额外的引号)。而不是这种行为,Rails应该创建一个由数组创建的可能值列表。


uvc成为一个Ruby数组,可以解决你的问题

uvc = [1, 3]
@worequests = Worequest.where(uvcondition.field_name + " " + uvcondition.ucondition + " ?",  uvc)