【问题标题】: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_phonephone2 都可以。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-06
        • 1970-01-01
        • 2018-01-28
        • 1970-01-01
        • 2010-10-29
        • 2019-11-13
        • 2016-02-02
        • 1970-01-01
        相关资源
        最近更新 更多