find_by_sql Ruby on Rails 3 безрезультатно - PullRequest
0 голосов
/ 17 июня 2011

У меня очень странная проблема при попытке использовать find_by_sql с Rails 3.0.7.Rails ничего не возвращает (пустой результат, []), но если я копирую и вставляю тот же самый запрос в mysql, он возвращает результат.

Это то, что я пытаюсь в Rails:

Document.find_by_sql(["select d.* from documents d, categorizations cg, combinations co where d.id = cg.document_id and co.id = cg.combination_id and co.assigned_parent_category_id=?", 1)

возвращает: []

, и вот что я делаю в mysql:

select documents.*
from documents, categorizations, combinations
where documents.id = categorizations.document_id
    and combinations.id = categorizations.combination_id
    and combinations.assigned_parent_category_id=1

возвращает: 1 результат

Может ли это быть Railsошибка или я что то не так делаю?Спасибо!

Ответы [ 2 ]

2 голосов
/ 17 июня 2011

Изменение

Document.find_by_sql(["select d.* from documents d, categorizations cg,
            combinations co where d.id = cg.document_id and co.id = cg.combination_id
            and co.assigned_parent_category_id=?", 1)

Для

Document.find_by_sql(["select d.* from documents d, categorizations cg,
            combinations co where d.id = cg.document_id and co.id = cg.combination_id
            and co.assigned_parent_category_id=?", 1])

OR

Document.find_by_sql("select d.* from documents d, categorizations cg,
            combinations co where d.id = cg.document_id and co.id = cg.combination_id
            and co.assigned_parent_category_id=1")
0 голосов
/ 17 июня 2011

Есть ли причина, по которой вы используете find_by_sql?

Документы предполагают, что указание массива (ваш синтаксис в любом случае выглядит неправильно - где заключительная квадратная скобка?) Не вариант - вы должны предоставить sql

# File activerecord/lib/active_record/base.rb, line 472
def find_by_sql(sql)
  connection.select_all(sanitize_sql(sql), "#{name} Load").collect! { |record| instantiate(record) }
end

РЕДАКТИРОВАТЬ: похоже, я не прав - sanitize_sql будет принимать строку, массив или хэш. Тем не менее ...

Мой совет: попробуйте сделать это без find_by_sql ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...