Ruby on Rails: способ тестирования ActiveRecord Где условия без попадания в базу данных? - PullRequest
0 голосов
/ 16 марта 2011

Я использую Ruby on Rails 2.3.8. У меня есть несколько объектов модели User, хранящихся в памяти, и несколько условий Where, с которыми я хочу их проверить. Поскольку все эти данные хранятся в памяти, я хочу избежать попадания в базу данных для выполнения этих проверок. Есть ли способ проверить эти модели, не обращаясь к базе данных, то есть какой-нибудь способ проверить условие SQL Где относительно объекта модели в памяти?

Чтобы прояснить ситуацию, если бы я на самом деле вытащил запись из базы данных, я бы сделал что-то вроде этого:

whereCondition = "name LIKE 'James Smith'"
User.find(:first, :conditions => [whereCondition])

У меня есть несколько пользователей и несколько whereConditions, доступных в памяти, и я действительно хотел бы сделать что-то вроде этого:

someUser.meetsCondition?(whereCondition)

Что бы вернуть логическое значение. Есть ли способ сделать это без написания моего собственного парсера SQL?

Спасибо.

Ответы [ 4 ]

1 голос
/ 16 марта 2011

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

user.name =~ /James Smith/
0 голосов
/ 16 марта 2011

Нет способа сделать это, не разбирая его самостоятельно.

Однако, если вы хотите, вы можете создать базу данных sqlite в памяти и загрузить в нее записи, а затем использовать свой запрос.,Хотя я не знаю, насколько это будет практично - определенно слишком много работы над обычным веб-запросом, и затраты на это могут быть гораздо дороже, чем просто выполнить запрос к вашей реальной базе данных в любом случае.Вам придется экспериментировать.

0 голосов
/ 16 марта 2011

Нет, нет встроенного механизма для выполнения логики SQL для коллекций в памяти.Вы должны написать свой собственный анализатор SQL, чтобы делать то, что вы хотите.

0 голосов
/ 16 марта 2011

В Rails есть настройки кэширования, о которых вы можете прочитать на сайте Руководства по Rails.Некоторые из них могут соответствовать тому, что вы пытаетесь выполнить.

Вы также можете проверить Memcached в сочетании с гемом cached_model .Я обычно использую это и обновляю кэшированную копию объекта в after_save модели обратного вызова.

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