Find_by_sql Ruby on Rails 3 нет результатов

118
16

У меня очень странная проблема при попытке использовать 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 или я делаю что-то неправильно? Спасибо!

спросил(а) 2021-01-25T18:27:07+03:00 5 месяцев назад
1
Решение
77

Изменить


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])

ИЛИ


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")

ответил(а) 2021-01-25T18:27:07+03:00 5 месяцев назад
45

Есть ли причина, по которой вы используете 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

EDIT: похоже, что я ошибаюсь - sanitize_sql возьмет строку, массив или хэш. Тем не менее...


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

ответил(а) 2021-01-25T18:27:07+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема