AR's find_by_* limits return results. How to avoid id?

24 views
Skip to first unread message

Wins Lin

unread,
May 28, 2013, 7:52:51 PM5/28/13
to rubyonra...@googlegroups.com
When I use find_by_name method I get LIMIT 1 result.

> SELECT "users".* FROM "users" WHERE "users"."age" = 25 LIMIT 1

But the "age" column is not unique in my table and its value may repeat.
So I expect that an array of records where "age" is 25 will be returned.
But AR limits the query by 1.

How to avoid it? Or is it the default behavior of "find_by_" methods to
limit queries by 1?
But it is not mentioned in Rails Guides then

--
Posted via http://www.ruby-forum.com/.

Kang Cao

unread,
May 28, 2013, 10:53:39 PM5/28/13
to rubyonra...@googlegroups.com
You should use 'where' if you are using rails 3.  the find_by method is not suggested now. Hence your problem is easy to be resolved by "User.where(:age=>25)

Frederick Cheung

unread,
May 29, 2013, 4:41:48 AM5/29/13
to rubyonra...@googlegroups.com
That's correct. find_by_* returns at most one row, find_all_by_* returns all of them

Fred

Wins Lin

unread,
May 29, 2013, 9:01:23 AM5/29/13
to rubyonra...@googlegroups.com
Kang Cao wrote in post #1110456:
> You should use 'where' if you are using rails 3. the find_by method is
> not suggested now. Hence your problem is easy to be resolved by
> "User.where(:age=>25)

Oh, yes, you're right. From Edge Guides:
Dynamic finders have been deprecated in Rails 4.0 and will be
removed in Rails 4.1.

I thought the other way around, that dynamic finders are better choice.
But the thing is that .find_by may return exactly a model object, but
.where returns ActiveRecord::Relation in all cases.
Reply all
Reply to author
Forward
0 new messages