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
>>