Мог бы получить скорбь, но вот оно.Рельсы Выполнение операции IN
Я пытаюсь выполнить операцию IN в одном из моих предложений в Rails.
Вызов:
@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-запросы. Это просто наполнит код.
ODBC :: Error: 22005 (245) [UnixODBC] [FreeTDS] [SQL Server] Преобразование не удалось при преобразовании значения NVARCHAR «20130618, 20130617, 20130616, 20130615, 20130614, 20130613, 20130612, 20130611, 20130610 'к типу данных int .: EXEC sp_executesql N'SELECT [dbo]. [BBOrders]. * FROM [dbo]. [BBOrders] WHERE (символ LIKE N' '%%' 'AND creationDateTimeInt IN (N''20130618, 20130617, 20130616, 20130615, 20130614, 20130613, 20130612, 20130611, 20130610' '))' – Alexey
Работает только по одному значению, но не по массиву – Alexey
Этот метод работал. Дополнение - Не используйте .join на вашем массиве. Оставьте это как есть и просто перейдите в массив. Рельсы справятся с этим. – Alexey