find_all / find_first deprecated : a question

was reading http://glu.ttono.us/articles/2006/08/30/guide-things-you-shouldnt-be-doing-in-rails getting this rails app ready for 2.0 ..

anyways, here's a small snippet that i'm wondering about:

No, I believe those are here to stay.

~Jamie

Hi, I would recommend referencing the API docs for Rails at the following:

http://api.rubyonrails.org/

Good luck,

-Conrad

Hi, in regards to API documents, you should be using the following instead of find_all and find_first: find(*args)

Find operates with three different retrieval approaches:

  • Find by id: This can either be a specific id (1), a list of ids (1, 5, 6), or an array of ids ([5, 6, 10]). If no record can be found for all of the listed ids, then RecordNotFound will be raised.

  • Find first: This will return the first record matched by the options used. These options can either be specific conditions or merely an order. If no record can matched, nil is returned.

  • Find all: This will return all the records matched by the options used. If no records are found, an empty array is returned. All approaches accept an option hash as their last parameter. The options are:

  • :conditions: An SQL fragment like “administrator = 1” or [ “user_name = ?”, username ]. See conditions in the intro.

  • :order: An SQL fragment like “created_at DESC, name”.

  • :group: An attribute name by which the result should be grouped. Uses the GROUP BY SQL-clause.

  • :limit: An integer determining the limit on the number of rows that should be returned.

  • :offset: An integer determining the offset from where the rows should be fetched. So at 5, it would skip the first 4 rows.

  • :joins: An SQL fragment for additional joins like “LEFT JOIN comments ON comments.post_id = id”. (Rarely needed). The records will be returned read-only since they will have attributes that do not correspond to the table’s columns. Pass :readonly => false to override.

  • :include: Names associations that should be loaded alongside using LEFT OUTER JOINs. The symbols named refer to already defined associations. See eager loading under Associations.

  • :select: By default, this is * as in SELECT * FROM, but can be changed if you for example want to do a join, but not include the joined columns.

  • :readonly: Mark the returned records read-only so they cannot be saved or updated. Examples for find first:

Person.find(:first) # returns the first object fetched by SELECT * FROM people
  Person.find(:first, :conditions => [ "user_name = ?", user_name])
  Person.find(:first, :order => "created_on DESC", :offset => 5)

Examples for find all:

Person.find(:all) # returns an array of objects for all the rows fetched by SELECT * FROM people
  Person.find(:all, :conditions => [ "category IN (?)", categories], :limit => 50)
  Person.find
(:all, :offset => 10, :limit => 10)
  Person.find(:all, :include => [ :account, :friends ])
  Person.find(:all, :group => "category")

Good luck,

-Conrad