2011-11-07 2 views
0

자동 증가 대신 UUID를 사용하여 모델을 설정하려고합니다.rails 3.1에서 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 필드를 사용할 수 있기를 원하므로 모든 레일스 마법을 오버라이드 할 필요가 없습니다. 그것은 레일 2에서 잘 작동하는 것 같다. 변경으로부터 ID를 보호하는 레일 설정이 있는가? 이 사용

답변

1

보십시오 : 귀하의 모델

set_primary_key :id 

.

activeuuid plugin도 있습니다.

This SO post 적어도 부분적으로는 set_primary_key 것을 백업하는 것으로 보입니다.

+0

아, 아주 좋습니다. 'set_primary_key'가 트릭을했습니다. 감사! 마이그레이션을 기반으로 레일스가 표준 ID를 사용할 때와 다르게 동작한다는 사실에 조금 놀랐습니다. 오, 그럼. – lobati

관련 문제