Potential bug with named_scope?

Hey, I setup this named_scope in my class:

  named_scope :latest, lambda { {:order => "created_at DESC", :limit => 1} }

it works fine, the sql returned looks like this:

...ORDER BY created_at DESC LIMIT 1

It looks like it works perfectly, except the object returned from my named_scope is actually an Array, Shouldn't it just return the 1 object rather than an array with 1 item? Seems like a bug to me.

I believe that it will always be like a find :all, so will return an array, much as find :all, :limit => 1 does.


Yeah, that just seems wrong to me, because now my method chain is stupid long:

ie: Object.relationship.latest.first

just seems kind of lame, it'd be cool if it were smart enough to notice a limit = 1 means 1 element in an array and to just ignore it.

- D

I'm afraid I have to disagree. There is nothing in the syntax of the original post that indicates the results should be anything other than an array. Granted an array of one object, but for consistency if you changed the behavior of named_scope to be "smart" enough to look at the SQL LIMIT then the ActiveRecord#find method should also be changed to recognize that as well.

So no. I say leave named_scope as it is. I would expect named_scope to return an array. Or add another explicit way to ask for a model just like you do in find.

MyModel.find :all ==> Array MyModel.find :first ==> Object MyModel.find :last ==> Object

That makes sense to me, and would be what I expect.

name_scope ==> Object

That does not make sense to me. You would need something like:

named_scope :all named_scope :first named_scope :last

Or something like that, which would not be buried down in the SQL.

Just my opinion.

Or how about something even better:

In class MyObject