Подтвердить что ты не робот

Найти новейшую запись в Rails 3

Мне было интересно, есть ли способ найти самую новую запись в таблице в rails3?

Спасибо

Эллиот

4b9b3361

Ответ 1

Для модели Post вы можете сделать @post = Post.order("created_at").last

(Причина, по которой я не просто выполнял @post = Post.last, - это то, что всегда по умолчанию сортируется по вашему первичному ключу (обычно id). В большинстве случаев это нормально, но я уверен, что есть сценарий где это может вызвать проблемы (например, установка пользовательских идентификаторов в записях, изменения базы данных, которые влияют на последовательность первичного ключа/автозапуск и т.д.). Сортировка по метке created_at гарантирует, что вы действительно получаете самую последнюю запись).

Ответ 2

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

Если вы знаете, что ваш столбец "id" является первичным ключом автоматического инкремента (который, вероятно, это так), просто используйте его, поскольку он является индексом по определению.

Кроме того, если AREL не оптимизирован для выбора только одной записи в find (: last), вы рискуете заставить ее выбрать ВСЕ записи, а затем вернуть вам только последний, используя метод "last()". Более эффективно ограничивать результаты одним:

MyModel.last(:order => "id asc", :limit => 1)

или

MyModel.first(:order => "id desc", :limit => 1)

Ответ 3

Да, вы можете использовать метод .last

Итак, если ваша модель называется Post, то:

>> Post.last
=> #<Post ...>

Ответ 4

Попробуйте, для модели с именем ModelName:

record = ModelName.last

Ответ 5

вы можете столкнуться с проблемами неоднозначности, используя created_at в таблице с достаточно высоким трафиком.

например. попробуйте:

INSERT INTO table (created_at) VALUES ( NOW() );
INSERT INTO table (created_at) VALUES ( NOW() );

.. имеет потенциал иметь тот же created_at, который имеет только 1 секунду разрешения. сортировка вернет их в определенном порядке.

вам может быть лучше сохранить значение микросетей и отсортировать его.