2013-08-27 2 views
5

В Rails 3, если бы я хотел попасть в db, я бы взял .all в конце запроса. Это полезно, когда я делаю такие вещи, как обновление кеша при записи (поэтому чтение всегда попадает в кеш).Rails 4 эквивалента Rails 3 'Model.all'

Теперь в Rails 4 Model.all возвращает объект ActiveRecord::Relation (т. Е. Не попадает в db). Каков наилучший способ получить его на самом деле перейти к db и вернуть указанные записи?

+0

попробуйте Model.all.load – Bigxiang

+0

@Bigxiang: ["Возвращаемое значение - это отношение, а не записи."] (Http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method- я-нагрузки). –

+0

О, извините, моя ошибка. Я думаю, что «to_a» будет работать. – Bigxiang

ответ

8

Model.all.to_a в Rails 4 даст тот же результат, как Modal.all в Rails 3.

Изменить:

@Bigxiang, отметил в своем комментарии попробовать Model.all.load, этот метод для некоторых хитов базы данных, но все еще возвращает ActiveRecordRelation. И в основном, чтобы получить аналогичную функциональность, как Model.all от «Rails 3», вы можете позвонить to_a по возвращенному ActiveRecordRelation.

+0

Да, я читал документ небрежно, «to_a» хорош :) – Bigxiang

+0

Я был взорван этой же проблемой, спасибо за сообщение –

+0

Также стоит, если у вас уже есть ActiveRecord :: Relation, вам не нужен ' .all'. например: Если у вас есть «Model.where (name:« John »). all' in Rails 3.2, вы можете заменить его на« Model.where »(имя:« Джон »). to_a', а не' Model.where (name : «John»). All.to_a' in Rails 4 – Felix

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