为名称中包含数字的列创建迁移

Create Migration for Column with a Number in the Name

我正在将一个应用程序移植到 rails 中,其中一些列的名称类似于

2nd_phone 2nd_address

当我尝试使用 t.string :2nd_phone

我收到语法错误,意外的 tINTEGER,期望 tSTRING_CONTENT 或 tSTRING_DBEG 或 tSTRING_DVAR 或 tSTRING_END

关于如何在 rals 中执行此操作的任何想法?

您看到的错误是因为 ruby 不喜欢符号 :2nd_phone 因为 ruby 不支持以数字开头的符号。如果您尝试按原样使用数据库模式,我认为这将是您遇到的许多问题中的第一个。

您可以使用 t.string "2nd_phone" 声明该列,这意味着迁移将 运行。但是,您仍然会遇到无法使用 getter 和 rails (activerecord) 提供的属性的设置器的问题。 IE。您将无法再次执行 my_thing.2nd_phone,因为 ruby 不支持以数字开头的方法名称。

您可以(也许)使用属性哈希 (my_thing["2nd_phone"]) 访问属性,但我希望您会 运行 遇到很多其他问题。

所以,总而言之,我的建议是尽可能更改数据库架构。 second_phonephone2 都可以。

在您的迁移文件中用引号将起始字符支持为数字 1 然后 运行 rake db:migrate

t.string :'2nd_phone'

在这样做的同时,如果你想创建新记录,你需要像这样:

Model.create(:'2nd_phone'=> 'your value')