ActiveRecordが誤ってキャッシュか何かを返している感じ。これで数時間嵌まった。
新規レコードをsave後、find_by_id(nil)すると、初回の呼び出しに限りsaveしたオブジェクトがマッチする。これは、仕様、じゃないよね。DB-Transactionとかも関係なさそうだし。誰かが報告済みかどうかは調べてないのであとで調べる。
$ pwd /home/yugui/dev/rails/simple-crud $ script/about About your application's environment Ruby version 1.8.4 (i386-linux) RubyGems version 0.8.11 Rails version 1.1.2 Active Record version 1.14.2 Action Pack version 1.12.1 Action Web Service version 1.1.2 Action Mailer version 1.2.1 Active Support version 1.3.1 Application root /home/yugui/dev/rails/simple-crud Environment development Database adapter mysql Database schema version 1 $cat db/migrate/001-user-migration.rb class UserMigration < ActiveRecord::Migration def self.up create_table(:users) {|table| table.column :name, :string, :length => 32 } end def self.down drop_table :users end end $ script/console Loading development environment. >> User.create :name => 'example' => #<User:0x40bef1b4 @attributes={"name"=>"example", "id"=>2}, @new_record=false, \ @errors=#<ActiveRecord::Errors:0x40b730c8 @base=#<User:0x40bef1b4 ...>, @errors={}>> >> User.find_by_id(nil) => #<User:0x40b69c80 @attributes={"name"=>"example", "id"=>"2"}> >> User.find_by_id(nil) => nil >> User.find_by_id(nil) => nil >>