使用名称中的数字为列创建迁移
我正在将一个应用程序移植到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_phone
或phone2
都可以工作。