2015-04-22 34 views
2

我移植一个应用程序到轨和一对夫妇的列被命名为东西像为列在名称中的数字

2nd_phone 2nd_address

,当我尝试做使用 迁移创建迁移t.string:2nd_phone

我得到的语法错误,意想不到的tINTEGER,期待tSTRING_CONTENT或tSTRING_DBEG或tSTRING_DVAR或tSTRING_END

任何想法如何做到这一点的RALS?

回答

1

在迁移文件中有这样加上引号,可支持起始字符为数字之一,然后运行rake db:migrate

t.string :'2nd_phone' 

,而这样做的方式,如果你想创建你需要有这样的新纪录:

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

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

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

您可能(可能)使用属性散列(my_thing["2nd_phone"])访问属性,但还有很多其他事情我希望您会遇到问题。

所以,总而言之,我的建议是如果可以的话更改数据库模式。 second_phonephone2都可以工作。

相关问题