ruby的自定义主键
问了许多高手都说 不建议自定义主键 这样写:
create_table :posts , :primary_key => 'userid' do |t|
但是生成的主键仍是自增的ID 和ruby的功能主键一样
后来看到了mysql_adapter.rb这个文件,
....
def native_database_types #:nodoc:
{
:primary_key => "int(11) DEFAULT NULL auto_increment
PRIMARY KEY",
:string => { :name => "varchar", :limit => 255 },
:text => { :name => "text" },
:integer => { :name => "int"},
:float => { :name => "float" },
:decimal => { :name => "decimal" },
:datetime => { :name => "datetime" },
:timestamp => { :name => "datetime" },
:time => { :name => "time" },
:date => { :name => "date" },
:binary => { :name => "blob" },
:boolean => { :name => "tinyint", :limit => 1 }
}
end
...
它的主键都是这样定义好的(所以说不建议你自定义主键)
那也许你有很多问题:如一个用户登陆的userid 之类的怎么办
其实你可以创建索引
add_index "admin", ["userid"], :userid=> "userid", :unique => true
千万不要这样写:
t.string :userid ,:unique => true
这样写不会报错但不会达到预期的效果
你也可以在model层添加这样一句:
validates_uniqueness_of :userid
但是为了安全个人觉得还是在数据表中加上索引还是必须的