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
但是为了安全个人觉得还是在数据表中加上索引还是必须的
分享到:
- 2008-07-15 12:24
- 浏览 5202
- 评论(0)
- 论坛回复 / 浏览 (0 / 2948)
- 查看更多
相关推荐
Ruby on Rails(简称Rails)是一个基于Ruby编程语言的开源Web应用程序框架,专注于简洁和生产力。它遵循模型-视图-控制器(MVC)架构模式,使得开发快速、高效的Web应用变得简单。Rails的核心理念是“约定优于配置”...
在前两版的内容架构基础上,第3版增加了对Rails 2中新特性和最佳实践的内容介绍。相比第2版中的内容,Rails 2增加了REST、资源、轻量级web service等新特性。本书涵盖了这些全新的内容,因此能更好地体现出Rails框架...
在Ruby on Rails开发中,有时我们希望使用UUID(Universally Unique Identifier)而非传统的自增整数ID作为模型的主键。UUID是一种确保每个生成的ID在全球范围内都是唯一的标准方法。在与PostgreSQL数据库配合时,...
数据库设计包括表格(或集合)结构、主键、外键、索引等,确保数据的一致性和高效查询。 4. **用户认证与授权**:为了保护用户数据,系统会实现用户身份验证(如OAuth2、JWT)和权限控制(如RBAC,角色基础访问控制...
我们可以: 查找缺少的空约束( ) 查找缺少的长度验证( ) 查找缺少的状态验证( ) 查找缺少的唯一性验证( ) 为BelongsTo关联查找丢失的外键( ) 查找缺少的唯一索引以进行唯一性验证( ) 查找HasOne和Has...
数据库设计涉及到表结构的设计、数据类型的选取、主键和外键的设置,以及相关的索引优化策略。理解这些数据模型可以帮助我们更好地分析和维护系统的数据流转。 **四、认证与授权** 为了确保用户安全,P2PMoney会...
开发者可以通过自定义 `config.gen` 文件,根据项目需求调整生成的代码结构,使代码更符合项目规范和设计模式。在 Ruby 开发环境中,这样的工具无疑提升了开发体验,降低了出错的可能性,值得在实际工作中探索和使用...
首先,我们要理解Ruby是一种动态类型的编程语言,常用于Web开发,特别是与Ruby on Rails框架结合时。Ruby on Rails提供了一种简洁、高效的开发方式,它内置了对数据库操作的支持,使用ActiveRecord作为ORM(对象关系...
2. **数据库设计**:理解实体关系模型(ER模型)和关系数据模型,包括键的概念(主键、外键)、数据完整性和约束。良好的数据库设计能确保数据的一致性和准确性。 3. **索引与查询优化**:学习如何为数据库表添加...
3. **索引**:主键、WHERE句中字段和外键适合建立索引,以提高查询速度。答案是A、B、C。 4. **TCP拥塞控制**:TCP的拥塞控制使用加性增、乘性减算法。答案是C。 5. **IP地址**:205.0.35.26不属于私有IP地址范围,...
使用`serial`或`bigserial`类型可以自动生成递增的序列号,适用于主键或其他需要唯一标识的场景。 #### 37. 我如何获得一个插入的序列号的值? 使用`currval()`函数可以返回最后生成的序列号值,但在并发环境中...
10. Ruby on Rails中的SQL操作:Ruby的ActiveRecord库是Ruby on Rails框架的一部分,它提供了一种面向对象的方式来操作数据库,使得开发者可以通过Ruby代码执行SQL命令。 在这个作业中,学生可能会学习如何使用SQL...
日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...