From 76690111d52dca6c1992ff6c9f9962c889b40c5d Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 18 Apr 2005 05:03:56 +0000 Subject: Fixes for postgresql testing #1129, #1130, #1131 git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1199 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/lib/active_record/base.rb | 27 ++++++++++++++-------- activerecord/test/associations_go_eager_test.rb | 4 ++-- .../test/fixtures/db_definitions/mysql.sql | 2 +- .../test/fixtures/db_definitions/postgresql.sql | 4 ++-- .../test/fixtures/db_definitions/sqlite.sql | 2 +- activerecord/test/fixtures/posts.yml | 1 - 6 files changed, 23 insertions(+), 17 deletions(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index ee8d233d2c..1bc54558fe 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -289,21 +289,28 @@ module ActiveRecord #:nodoc: @@default_timezone = :local class << self # Class methods - # Returns objects for the records responding to either a specific id (1), a list of ids (1, 5, 6) or an array of ids. - # If only one ID is specified, that object is returned directly. If more than one ID is specified, an array is returned. + # Find operates with three different retreval 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 accepts an option hash as their last parameter. The options are: + # + # * :conditions: + # * :order: + # * :limit: + # * :offset: + # * :joins: + # * :include: + # # Examples: # Person.find(1) # returns the object for ID = 1 # Person.find(1, 2, 6) # returns an array for objects with IDs in (1, 2, 6) # Person.find([7, 17]) # returns an array for objects with IDs in (7, 17) # Person.find([1]) # returns an array for objects the object with ID = 1 - # - # The last argument may be a Hash of find options. Currently, +conditions+ is the only option, behaving the same as with +find_all+. - # Person.find(1, :conditions => "associate_id = 5" - # Person.find(1, 2, 6, :conditions => "status = 'active'" - # Person.find([7, 17], :conditions => ["sanitize_me = ?", "bare'quote"] - # Person.find(25, :conditions => ["name = :name AND age = :age", { :name => "Mary", :age => 22 }] - # - # +RecordNotFound+ is raised if no record can be found. def find(*args) options = extract_options_from_args!(args) diff --git a/activerecord/test/associations_go_eager_test.rb b/activerecord/test/associations_go_eager_test.rb index 498d557a02..0bd887478d 100644 --- a/activerecord/test/associations_go_eager_test.rb +++ b/activerecord/test/associations_go_eager_test.rb @@ -10,11 +10,11 @@ class EagerAssociationTest < Test::Unit::TestCase def test_loading_with_one_association posts = Post.find(:all, :include => :comments) assert_equal 2, posts.first.comments.size - assert_equal @greetings.body, posts.first.comments.first.body + assert posts.first.comments.include?(@greetings) post = Post.find(:first, :include => :comments, :conditions => "posts.title = 'Welcome to the weblog'") assert_equal 2, post.comments.size - assert_equal @greetings.body, post.comments.first.body + assert post.comments.include?(@greetings) end def test_loading_with_multiple_associations diff --git a/activerecord/test/fixtures/db_definitions/mysql.sql b/activerecord/test/fixtures/db_definitions/mysql.sql index 8e263310ab..294f227be3 100755 --- a/activerecord/test/fixtures/db_definitions/mysql.sql +++ b/activerecord/test/fixtures/db_definitions/mysql.sql @@ -131,7 +131,7 @@ CREATE TABLE `computers` ( CREATE TABLE `posts` ( `id` INTEGER NOT NULL PRIMARY KEY, - `author_id` INTEGER NOT NULL, + `author_id` INTEGER, `title` VARCHAR(255) NOT NULL, `body` TEXT NOT NULL, `type` VARCHAR(255) NOT NULL diff --git a/activerecord/test/fixtures/db_definitions/postgresql.sql b/activerecord/test/fixtures/db_definitions/postgresql.sql index ae41f80788..2bc18dfb2b 100644 --- a/activerecord/test/fixtures/db_definitions/postgresql.sql +++ b/activerecord/test/fixtures/db_definitions/postgresql.sql @@ -167,7 +167,7 @@ CREATE TABLE authors ( name varchar(255) default NULL ); -CREATE TABLE taske ( +CREATE TABLE tasks ( id serial, starting timestamp, ending timestamp, @@ -181,5 +181,5 @@ CREATE TABLE categories ( CREATE TABLE categories_posts ( category_id integer NOT NULL, - post_id int integer NOT NULL + post_id integer NOT NULL ); diff --git a/activerecord/test/fixtures/db_definitions/sqlite.sql b/activerecord/test/fixtures/db_definitions/sqlite.sql index 2a26ff8c37..33c85b4d1c 100644 --- a/activerecord/test/fixtures/db_definitions/sqlite.sql +++ b/activerecord/test/fixtures/db_definitions/sqlite.sql @@ -118,7 +118,7 @@ CREATE TABLE 'computers' ( CREATE TABLE 'posts' ( 'id' INTEGER NOT NULL PRIMARY KEY, - 'author_id' INTEGER NOT NULL, + 'author_id' INTEGER, 'title' VARCHAR(255) NOT NULL, 'type' VARCHAR(255) NOT NULL, 'body' TEXT NOT NULL diff --git a/activerecord/test/fixtures/posts.yml b/activerecord/test/fixtures/posts.yml index 9d22b2a603..037f0a2323 100644 --- a/activerecord/test/fixtures/posts.yml +++ b/activerecord/test/fixtures/posts.yml @@ -14,7 +14,6 @@ thinking: authorless: id: 3 - author_id: "" title: I don't have any comments body: I just don't want to type: Post -- cgit v1.2.3