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를 보호하는 레일 설정이 있는가? 이 사용
아, 아주 좋습니다. 'set_primary_key'가 트릭을했습니다. 감사! 마이그레이션을 기반으로 레일스가 표준 ID를 사용할 때와 다르게 동작한다는 사실에 조금 놀랐습니다. 오, 그럼. – lobati