为名称中包含数字的列创建迁移
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_phone
或 phone2
都可以。
在您的迁移文件中用引号将起始字符支持为数字 1 然后 运行 rake db:migrate
t.string :'2nd_phone'
在这样做的同时,如果你想创建新记录,你需要像这样:
Model.create(:'2nd_phone'=> 'your value')
我正在将一个应用程序移植到 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_phone
或 phone2
都可以。
在您的迁移文件中用引号将起始字符支持为数字 1 然后 运行 rake db:migrate
t.string :'2nd_phone'
在这样做的同时,如果你想创建新记录,你需要像这样:
Model.create(:'2nd_phone'=> 'your value')