Find the newest record in Rails 3

Ruby on-RailsRubyRuby on-Rails-3

Ruby on-Rails Problem Overview


I was wondering if there is a way to find the newest record in a table in rails3?

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

Given a Post model, you could do @post = Post.order("created_at").last

(The reason I didn't just do a @post = Post.last is because that always defaults to sort by your primary key (usually id). Most of the time this is fine, but I'm sure there's a scenario where that could cause problems (e.g. setting custom IDs on records, database changes which affect the primary key sequencing/autonumbering, etc.). Sorting by the created_at timestamp ensures you are really getting the most recent record).

Solution 2 - Ruby on-Rails

While dmarkow's answer is technically correct, you'll need to make an index on created_at or risk an increasingly slow query as your database grows.

If you know that your "id" column is an auto-increment primary key (which it likely is), then just use it since it is an index by definition.

Also, unless AREL is optimized to select only one record in a find(:last), you run the risk of making it select ALL records, then return you just the last one by using the "last()" method. More efficient is to limit the results to one:

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

or

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

Solution 3 - Ruby on-Rails

you may run into ambiguity issues using created_at on a sufficiently high-traffic table.

eg. try:

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

..has the potential to have the same created_at, which only has 1 second of resolution. a sort would return them in no particular order.

you may be better off storing a microtime value and sorting on that.

Solution 4 - Ruby on-Rails

Try, for a model named ModelName:

record = ModelName.last

Solution 5 - Ruby on-Rails

Yes, you can use the method .last

So if your model is called Post then:

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionElliotView Question on Stackoverflow
Solution 1 - Ruby on-RailsDylan MarkowView Answer on Stackoverflow
Solution 2 - Ruby on-RailsjemmingerView Answer on Stackoverflow
Solution 3 - Ruby on-RailsRUN-CMDView Answer on Stackoverflow
Solution 4 - Ruby on-RailsSam RitchieView Answer on Stackoverflow
Solution 5 - Ruby on-RailsDanneManneView Answer on Stackoverflow