Мне было интересно, есть ли способ найти самую новую запись в таблице в rails3?
Спасибо
Эллиот
Мне было интересно, есть ли способ найти самую новую запись в таблице в rails3?
Спасибо
Эллиот
Для модели 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)
Да, вы можете использовать метод .last
Итак, если ваша модель называется Post, то:
>> Post.last
=> #<Post ...>
Попробуйте, для модели с именем ModelName
:
record = ModelName.last
вы можете столкнуться с проблемами неоднозначности, используя created_at
в таблице с достаточно высоким трафиком.
например. попробуйте:
INSERT INTO table (created_at) VALUES ( NOW() );
INSERT INTO table (created_at) VALUES ( NOW() );
.. имеет потенциал иметь тот же created_at
, который имеет только 1 секунду разрешения. сортировка вернет их в определенном порядке.
вам может быть лучше сохранить значение микросетей и отсортировать его.