之前遇到过很多次,老是忘记,今天记录一下吧。
mysql可以支持int、tinyint、bigint等几种数据格式的字段,rails(准确说是activerecord)抽象了数据结构,统一使用integer表示整数,然后根据limit来决定使用哪种int:
# activerecord-2.3.8/lib/active_record/connection_adapters/abstract/schema_definitions.rb
module ActiveRecord
module ConnectionAdapters #:nodoc:
# An abstract definition of a column in a table.
class Column
def initialize(name, default, sql_type = nil, null = true)
@name, @sql_type, @null = name, sql_type, null
@limit, @precision, @scale = extract_limit(sql_type), extract_precision(sql_type), extract_scale(sql_type)
@type = simplified_type(sql_type)
@default = extract_default(default)
@primary = nil
end
......
def simplified_type(field_type)
case field_type
when /int/i
:integer
when /float|double/i
:float
when /decimal|numeric|number/i
extract_scale(field_type) == 0 ? :integer : :decimal
when /datetime/i
:datetime
when /timestamp/i
:timestamp
when /time/i
......
end
end
end
end
end
end
但是这个做法仅限于普通字段,activerecord中对于主键存在大量硬编码,因此我们就不能通过改变主键的limit的方式设置int类型。
绕开的办法有两种:
- 修改 activerecord-2.3.8/lib/active_record/connection_adapters/connection_adapters/mysql_adapter.rb 中的 NATIVE_DATABASE_TYPES 常量
- 不设置主键,手工指定 id -
create_table :features, :id => false do |t|
t.integer :id, :limit => 8
......
end
分享到:
相关推荐
NULL 博文链接:https://zyn-zyn.iteye.com/blog/1186887
支持rails2.0以上版本的配置说明,文档从我自己的博客中整理出来,不愿意用资源分的朋友可以去我的博客看: http://wudihamagong.spaces.live.com/ 或者 http://blog.csdn.net/abcdefg0 ^_^
docker-rails6-mysql8 启动Rails设置 跑新轨道 $ docker-compose run web rails new . --force --no-deps --database=mysql --skip-test --webpacker docker镜像构建 $ docker-compose build 编辑database.yml ...
使用PostgreSQL将这个gem添加到Rails应用程序中会自动启用UUID主键。 用法 将此宝石添加到您的Rails应用程序中。 安装 将此行添加到应用程序的Gemfile中: gem 'upknit' 然后执行: $ bundle 内部构造 这个gem做...
此dll为ruby on rails使用MySql时,要用的程序
本文简单介绍了Ruby On Rails的安装步骤以及MySQL数据库的配置方法,并介绍了几个官方阅读资源。
Barista 可以简单透明的方式让你的 Rails 3 应用支持 CoffeeScript 脚本。 标签:Rails
– c:/ruby/lib/ruby/gems/1.8/gems/mysql-2.7.3-x86-mswin32/ext/mysql.so 实际上是找不到连接所需的dll文件:libmySQL.dll 在mysql安装目录下的bin目录下将此文件复制到ruby的bin目录下即可解决此问题. ...
解决 Rails bundle 安装不上 mysql gem包的问题 环境 ubuntu 12.04 ruby-2.1.1 首先 新建一个的一个项目,在该项目上执行 bundle install 提示 代码如下: … Make sure that gem install mysql2 -v ‘0.3.16’; ...
主要介绍了Rails中使用MySQL分区表一个提升性能的方法,本文总结出了一个简单的方法实现避免扫描全部的分区表,从而提升性能,需要的朋友可以参考下
rails new webapp -d mysql rails server #启动服务 rails generate scaffold hello rails generate scaffold Post name:string title:string content:text rake routes 显示路由config/routes.rb
NULL 博文链接:https://like-eagle.iteye.com/blog/994634
rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...
Ubuntu 11.04安装Ruby on rails 连接MySQL数据库.pdf
1.安装gem,进入gem文件夹,里面有个setup文件,直接双击就行了。 2.进入rails目录使用gem命令安装(这一步必须要上...3.复制libmySQL.dll到ruby的安装目录的bin文件夹下,然后使用gem安装mysql-2.7.3-x86-mswin32.gem.
[Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...
npm-rails, 通过像DSL这样的Bundler支持 Rails的NPM npm Rails 项目的NPM支持。 它允许你使用bundler像DSL和rake任务来包括npm包。 这个基于Browserify的gem,用于捆绑包和解析依赖关系。安装将此行添加到你的应用...
主要介绍了简单介绍Ruby on Rails对PostgreSQL数组类型的支持,Rails框架从4.0以后对PG的数组提供了支持,需要的朋友可以参考下
Ruby on Rails Guides v2 - Ruby on Rails 4.2.5
《Ruby on Rails Tutorial》中文版(原书第2版,涵盖 Rails 4) Ruby 是一门很美的计算机语言,其设计原则就是“让编程人员快乐”。David Heinemeier Hansson 就是看重了这一点,才在开发 Rails 框架时选择了 Ruby...