rails on rails 的(自定义)主键和唯一索引

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

但是为了安全个人觉得还是在数据表中加上索引还是必须的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值