exists?(id) public

Returns true if the given id represents the primary key of a record in the database, false otherwise. Example:

Show source
Register or log in to add new notes.
February 3, 2009
3 thanks

Possible gotcha

Please note that exists? doesn’t hold all the conventions of find, i.e. you can’t do:

Person.exists?(:conditions => ['name LIKE ?', "%#{query}%"]) # DOESN'T WORK!
January 30, 2009 - (v1.2.0 - v2.1.0)
3 thanks

Hash conditions require explicit key and value

When condition passed as hash, the behavior is different from a finder method. Finder methods, such as:

find(:all, :user=>user)

will apply the user_id = user.id convention, provided user is an association (e.g. belongs_to :user). The exists? method will not do the same. You must specify the foreign key name and value explicitly, i.e:

September 9, 2010
2 thanks

takes ActiveRecord object as an arg as well

One undocumented feature, you can do this:

person = Person.first
# => returns true

This came in handy for me when I needed to see if something belonged to a particular scope.

scope = "created_rails"
person = Person.find_by_name "dhh"
# => returns true

Obviously this relies on you having a named_scope in your Person model called “created_rails”.

April 22, 2010
1 thank

Dynamic exists? methods

There are no dynamic exists? methods analogous to dynamic finders, which means that while you can do this:


you can’t do this:

Person.exists_by_name('David') # DOES NOT WORK

nor this:

Person.exists_by_name?('David') # DOES NOT WORK

However, you can simulate this with dynamic scope:


You’ll have to admit that this is so much better than the plain old method:

Person.exists?(:name => "David")