使用名称中的数字为列创建迁移

我正在将一个应用程序移植到rails中,并且有几个列被命名为

2nd_phone 2nd_address

当我尝试使用t.string:2nd_phone进行迁移时

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

任何想法如何在rals?

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

 t.string :'2nd_phone' 

虽然这样做,如果你想创建新的记录,你需要这样:

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

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

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

您可以(可能)使用属性hash( my_thing["2nd_phone"] )访问属性,但是还有很多其他的东西,我希望你会遇到问题。

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