0

可能会悲伤,但它来了。

我正在尝试对我在 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 查询。这只会增加代码量。

4

2 回答 2

1

如果你在 Rails 3 上,你可以像这样使用 AR 查询界面:

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

更多活动记录查询接口

于 2013-06-18T13:23:46.253 回答
1

尝试这个:

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

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

于 2013-06-18T13:31:44.403 回答