2012-06-25 2 views
2
> player.records 
Record Load (0.5ms) SELECT * FROM `records` WHERE (`records`.player_id = 1) 

> player.records.first(:conditions => {:metric_id => "IS NOT NULL"}) 
Record Load (0.5ms) SELECT * FROM `records` WHERE (`records`.player_id = 1 AND (`records`.`metric_id` = 'IS NOT NULL')) LIMIT 1 

Есть ли способ сделать второй запрос не попавшим в базу данных, но вместо этого использовать кеш? Кажется немного чрезмерным, чтобы он снова попадал в базу данных, когда данные уже находятся в памяти.Может ли кеш-память Rails в этой ситуации?

Мне нужны оба результата. Я знаю, что Ruby может перебирать значения, но я бы предпочел сделать это через ActiveRecord, если это возможно. Я исхожу из фона Django, где filter() сделал это просто отлично.

Я использую Rails 2.3.

ответ

0

Нет, просто потому, что состояние отличается.

Но попытайтесь объяснить контекст. Зачем вам нужно использовать оба запроса? Вы не можете использовать только вторую?

Если вам нужны оба варианта, почему вы не можете фильтровать Array с кодом Ruby вместо того, чтобы делать другой запрос?

+0

Я мог бы фильтровать массив с кодом Ruby, но я бы предпочел, чтобы этого не было. Я иду из фона Django, где 'filter()' сделал это просто отлично. – babonk

+0

Серьезно, в чем проблема с 'player.records.select {| x | x.metric_id! = nil} [0] '? Это сработало бы хорошо для вас, и у него не было бы дополнительной связи с базой данных. – YuriAlbuquerque

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