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

时间:2015-04-22 16:12:21

标签: ruby-on-rails ruby-on-rails-4 migration rake

我将应用移植到rails中,其中一些列被命名为

2nd_phone 2nd_address

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

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

如何在rals中做到这一点?

2 个答案:

答案 0 :(得分:1)

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

t.string :'2nd_phone'

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

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

答案 1 :(得分:0)

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

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

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

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