通过Rails迁移定义固定长度SQL列(例如CHAR(12))的最佳方法是什么?

为什么模型不应该处理这个问题,是因为char()和varchar()的性能,我希望避免在数据库中注入原始SQL.

编辑:我知道:limit修饰符,但是字段仍然是varchar(这对性能不利),并且不允许最小大小.

推荐答案

如果Rails不理解列类型,它会直接将其传递给数据库.因此,如果您想要char而不是varchar,只需替换:

t.column :token, :string

与:

t.column :token, "char(12)"

当然,这可能会也可能不会使您的迁移无法移植到另一个数据库.

(计入http://laurelfan.com/2010/1/26/special-mysql-types-in-rails-migrations)

Ruby-on-rails相关问答推荐

在ransackable_scopes中的作用域上创建activeadmin过滤器

仅在两个子域间共享Rails cookies,并为所有其他子域使用单独的cookie

Ruby Hash 中 tap / delete 和 except 的区别

如何启动 rails 控制台并专门使用测试数据库?

File.open,写入和保存?

Rails 将 form_for 对象传递给部分

Rails ActiveRecord:验证单个属性

Rails 在关联模型中排序

添加自定义字段/列以使用 Rails 4 进行设计

什么是 Ruby 中的 Python 文档字符串?

如何在 rspec 中运行单个测试?

DateTime.now 还是 Time.now?

我收到在扫描下一个令牌时发现无法启动任何令牌的字符

在 RoR 中引用同一个表的多个外键

Ruby - 合并两个数组并删除重复的值

通过 Ruby 或 Rails 的 LDAP

从 Rails 中的控制器调用辅助方法时出现未定义的方法

Test::Unit Rails - 如何断言一个数字大于另一个?

rails 获取应用程序根/基本 url

没有路由匹配缺少必需的键:[:id]