无法在rails 3.1中手动分配id

时间:2011-11-07 02:44:28

标签: ruby-on-rails-3 guid uuid

我正在尝试使用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免受更改?

1 个答案:

答案 0 :(得分:1)

尝试使用:

set_primary_key :id

在您的模特中。

还有activeuuid plugin

This SO post似乎支持set_primary_key事,至少部分支持。