Rails - find_by_sql + хранимая процедура - PullRequest
1 голос
/ 11 марта 2011

Я пытаюсь получить объекты из моей базы данных MySQL, используя хранимую процедуру, которую я создал.

@locs = Location.find_by_sql("CALL geodist(100.4058, 37.7907, 10000, 'Sample')")

Это приводит к следующей ошибке

Location Load (6.4ms)  CALL geodist(100.4058, 37.7907, 10000, 'Sample')
Completed   in 37ms

Mysql2::Error (Commands out of sync; you can't run this command now):

Следующее, однако, прекрасно работает:

@locations = Location.connection.select_all("CALL geodist(100.4058, 37.7907, 10000, 'Sample')")

Однако он не возвращает объекты, только хэш значений.

Есть ли способ заставить find_by_sql работать? Если нет, то как я могу вручную создать модели AR без повторного запроса к базе данных?

Спасибо!

1 Ответ

1 голос
/ 27 августа 2011

вы можете создавать объекты самостоятельно, посылая каждый хеш в конструктор вашей активной модели записи.

@locations = Location.connection.select_all("CALL geodist(100.4058, 37.7907, 10000, 'Sample')")
results = Array.new
@locations.each do |location|
  results[] = Location.new(location)
end

UPD: кстати, странное поведение. Я только что посмотрел на реализацию метода find_by_sql, это выглядит знакомо http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-find_by_sql

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