Rails执行操作

时间:2013-06-18 13:15:12

标签: sql database ruby-on-rails-3

可能会感到悲伤,但它来了。

我正在尝试对Rails中的一个子句执行IN操作。

电话是:

@ret = BBOrder.find(:all, :conditions => ["symbol LIKE ? AND creationDateTimeInt IN ?", "%#{symbol}%", "#{date_ints}"])

date_ints之前是作为数组创建的,然后对它们有一个join.(', ')。我试着输入一个值来测试操作

错误消息是:

 BBOrder Load (2.2ms)  EXEC sp_executesql N'SELECT [dbo].[BBOrders].* FROM [dbo].[BBOrders] WHERE (symbol LIKE N''%%'' AND creationDateTimeInt IN N''(20130616)'')'
ODBC::Error: 37000 (102) [unixODBC][FreeTDS][SQL Server]Incorrect syntax near '(20130616)'.: EXEC sp_executesql N'SELECT [dbo].[BBOrders].* FROM [dbo].[BBOrders] WHERE (symbol LIKE N''%%'' AND creationDateTimeInt IN N''(20130616)'')'
Completed 500 Internal Server Error in 26ms

ActiveRecord::StatementInvalid (ODBC::Error: 37000 (102) [unixODBC][FreeTDS][SQL Server]Incorrect syntax near '(20130616)'.: EXEC sp_executesql N'SELECT [dbo].[BBOrders].* FROM [dbo].[BBOrders] WHERE (symbol LIKE N''%%'' AND creationDateTimeInt IN N''(20130616)'')'):
  app/controllers/pages_controller.rb:43:in `home'

有什么想法吗?

我不想做原始的SQL查询。这只会增加代码。

2 个答案:

答案 0 :(得分:1)

如果您使用的是Rails 3,则可以使用AR查询界面:

BBOrder.where('symbol LIKE ?', "%#{symbol}%").where(creationDateTimeInt: date_ints)

更多Active Record Query Interface

答案 1 :(得分:1)

试试这个:

@ret = BBOrder.find(:all, :conditions => ["symbol LIKE ? AND creationDateTimeInt IN(?)", "%#{symbol}%", date_ints])

您不需要对IN值进行字符串解析,我认为您需要括号。