2011-11-07 16 views
0

自動インクリメントではなくUUIDを使用してモデルを設定しようとしています。ユーザモデルがちょうど持ってレールにidを手動で割り当てることはできません。

class CreateUsers < ActiveRecord::Migration 
    def change 
    create_table :users, :id => false do |t| 
     t.column :id, 'char(36) binary', :null => false, :primary => true 
     t.string :email 
     t.string :username 
     t.string :password_hash 
     t.string :password_salt 

     t.timestamps 
    end 
    end 
end 

class User < ActiveRecord::Base 
end 

私はコンソールでidを割り当てようとすると、それはとりませんUUIDの一部で悩まずに、こちらのように私のコードが見えるものです:

ruby-1.9.3-p0 > u = User.new 
=> #<User id: nil, email: nil, username: nil, password_hash: nil, password_salt: nil, created_at: nil, updated_at: nil> 
ruby-1.9.3-p0 > u.id = 'stuff' 
=> "stuff" 
ruby-1.9.3-p0 > u.id 
=> nil 
ruby-1.9.3-p0 > u.id = UUIDTools::UUID.random_create.to_s 
=> "d3cd5bef-22b4-4fb1-b00f-10d8bbc94dc1" 
ruby-1.9.3-p0 > u.id 
=> nil 
ruby-1.9.3-p0 > u.email = 'stuff' 
=> "stuff" 
ruby-1.9.3-p0 > u.email 
=> "stuff" 

idを手動で割り当てることができないのはなぜですか。私が列に何か他の名前を付けるとうまくいくが、idフィールドを使うことができるので、すべてのレールの魔法を無効にする必要はない。 Rails 2では正常に動作しているようです。変更からIDを保護するいくつかのRails設定がありますか?お使いのモデルで

set_primary_key :id 

答えて

1

はこれを使用してみてください。

activeuuid pluginもあります。

This SO post少なくとも部分的にはset_primary_keyのものをバックアップするようです。

+0

ああ、非常にいいです。 'set_primary_key'はそのトリックでした。ありがとう!移行に基づいて、私はRailsが標準のIDとは異なる動作をすることに少し驚いています。しかたがない。 – lobati

関連する問題