2013-06-18 5 views
0

Мог бы получить скорбь, но вот оно.Рельсы Выполнение операции 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-запросы. Это просто наполнит код.

ответ

1

Попробуйте это:

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

Вам не нужно выполните синтаксический анализ строки для значения IN, и я думаю, что вам нужны скобки.

+0

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

+0

Работает только по одному значению, но не по массиву – Alexey

+0

Этот метод работал. Дополнение - Не используйте .join на вашем массиве. Оставьте это как есть и просто перейдите в массив. Рельсы справятся с этим. – Alexey

1

Если вы находитесь на Rails 3 вы можете использовать интерфейс AR запроса, как это:

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

Подробнее здесь Active Record Query Interface

+0

Это дает тот же результат – Alexey

+0

Это может быть из-за LIKE заявление – basgys

Смежные вопросы