【问题标题】:Create Migration for Column with a Number in the Name为名称中带有数字的列创建迁移
【发布时间】:2015-04-22 16:12:21
【问题描述】:
我正在将一个应用程序移植到 Rails 中,其中一些列被命名为
第二个电话
第二个地址
当我尝试使用
t.string :2nd_phone
我收到语法错误,意外 tINTEGER,应为 tSTRING_CONTENT 或 tSTRING_DBEG 或 tSTRING_DVAR 或 tSTRING_END
任何想法如何在 rals 中做到这一点?
【问题讨论】:
标签:
ruby-on-rails
ruby-on-rails-4
migration
rake
【解决方案1】:
在您的迁移文件中添加引号以支持作为数字的起始字符,然后运行 rake db:migrate
t.string :'2nd_phone'
这样做时,如果您想创建新记录,则需要这样:
Model.create(:'2nd_phone'=> 'your value')
【解决方案2】:
您看到的错误是因为 ruby 不喜欢符号 :2nd_phone,因为 ruby 不支持以数字开头的符号。如果您尝试完全按原样使用数据库模式,我认为这将是您遇到的许多问题中的第一个。
您可以使用t.string "2nd_phone" 声明该列,这意味着迁移将运行。但是,您仍然会遇到无法将 getter 和 setter 用于 rails (activerecord) 将提供的属性的问题。 IE。你将无法使用my_thing.2nd_phone,再次因为 ruby 不支持以数字开头的方法名称。
您可以(也许)使用属性哈希 (my_thing["2nd_phone"]) 访问属性,但我预计您会遇到很多其他问题。
所以,总而言之,我的建议是尽可能更改数据库架构。 second_phone 或 phone2 都可以。