如何创建rails迁移以删除/更改精度和十进制缩放

在我将应用程序推送到使用postgres的heroku后如果我在内容中输入一个长度超过255的字符串,我会得到错误

问题是我需要内容包含一个非常长的字符串(自由文本可能是数千个字符)

  1. 什么变量(字符串不适合这个)会接受?
  2. 如何创建迁移以替换该列的类型

如果你想要一个没有长度限制的字符串你应该使用string与Rails。 像这樣的迁移:

应该解决问题 您可能还需要string或其他一些选项。

当您使用没有显式限制的string列时Rails将添加隐式2070689.但是如果您使用text,您将获得数据库支持的任意长度字符串类型 varchar),数据库内部对待textvarchar(n)除了varchar(n)的额外长度限制;如果您在列大小上有外部约束(例如表格897 / B上的字段432将长度为23个芓符的政府表格),则您应该只使用varchar(n)(AKA

顺便说一句如果您在任何地方使用string列,则应始终指定:limit作为提醒您自己存在限制并且您应该在模型中进行验证以确保不超过限制。 如果超过限制PostgreSQL会抱怨并引发异常,MySQL会悄悄截断字符串或抱怨(取决于服务器配置)SQLite会让它按原样传遞,其他数据库会做其他事情(可能会抱怨)

此外,您还应该在同一个数据库(通常是Heroku上的PostgreSQL)之上进行开发测试和部署,甚至应该使鼡相同版本的数据库服务器 数据库之间存在其他差异(例如GROUP BY的行为)ActiveRecord不会将您与之隔离。 你可能已经这样做了但我想我还是会提到它。

虽然接受的答案非常好但我想在这里添加一个答案,希望更好地处理原始海报问题第2部分对于像我这样的非专家。

  1. 如何创建迁移以替换该列的类型

您可以通过在控制台中键入来生成迁移以保存更改(只需将表名替换为Up为列名替换Down

例如,我想在一个名为TodoItems的表中创建┅个迁移将列的类型从Up更改为Down

输入代码后更改列只需运行:

要应用迁移。 如果您出错您可以随时恢复更改:

4发布以来,您可以使用reversible來避免此错误:

为了更加合法合规运营网站我們正在对全站内容进行审核,之前的内容审核通过后才能访问

由于审核工作量巨大,完成审核还需要时间我们正在想方设法提高审核速度,由此给您带来麻烦请您谅解。

如果您访问园子时跳转到这篇博文说明当前访问的内容还在审核列表中,如果您急需访问麻烦您将对应的网址反馈给我们,我们会优先审核

我要回帖

 

随机推荐