`
vwangzhen
  • 浏览: 29193 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics