我正在尝试使用UUID而不是自动增量来设置模型。不用打扰UUID部分,这就是我的代码:
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
时,它不需要:
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魔法。它似乎在Rails 2中运行良好。是否有一些Rails设置可以保护id免受更改?
答案 0 :(得分:1)