Найти самую новую запись в Rails 3
Мне было интересно, есть ли способ найти самую новую запись в таблице в rails3?
спасибо
Эллиот
5 ответов:
учитывая модель Post, вы можете сделать
@post = Post.order("created_at").last
(причина, по которой я не просто сделал
@post = Post.last
это потому, что всегда по умолчанию сортируется по первичному ключу (обычноid
). В большинстве случаев это нормально, но я уверен, что есть сценарий, в котором это может вызвать проблемы (например, установка пользовательских идентификаторов в записях, изменения базы данных, которые влияют на последовательность первичного ключа/автонумерацию и т. д.). Сортировка поcreated_at
отметка времени гарантирует, что вы действительно получаете самую последнюю запись).
хотя ответ dmarkow технически верен, вам нужно будет сделать индекс на created_at или рисковать все более медленным запросом по мере роста вашей базы данных.
Если вы знаете, что ваш столбец "id" является первичным ключом с автоматическим приращением (что, вероятно, так и есть), просто используйте его, поскольку это индекс по определению.
кроме того, если AREL не оптимизирован для выбора только одной записи в find (: last), вы рискуете сделать его выбрать все записи, а затем вернуть вам только последнюю используя метод " last ()". Более эффективным является ограничение результатов одним:
MyModel.last(:order => "id asc", :limit => 1)
или
MyModel.first(:order => "id desc", :limit => 1)
Да, вы можете использовать метод .последний
Итак, если ваша модель называется Post, то:
>> Post.last => #<Post ...>
вы можете столкнуться с проблемами неоднозначности, используя
created_at
на достаточно высокой таблице трафика.например. попробуйте:
INSERT INTO table (created_at) VALUES ( NOW() ); INSERT INTO table (created_at) VALUES ( NOW() );
..имеет потенциал, чтобы иметь то же самое
created_at
, который имеет только 1 секунду разрешения. вид вернет их в произвольном порядке.возможно, вам лучше сохранить значение microtime и отсортировать его.