【问题标题】:camelCase column in postgresql database in rails (ActiveRecord)rails中postgresql数据库中的camelCase列(ActiveRecord)
【发布时间】:2021-11-08 08:41:40
【问题描述】:

我有 Post 模型。它有标题和正文。我想在其中添加简短描述。虽然,我知道如何使用snake_case(即short_description),但我想知道是否有任何方法可以创建一个帖子 camelCase(即 shortDescription)。

这是我的 schema.rb 文件

  create_table "posts", force: :cascade do |t|
    t.datetime "created_at",                     null: false
    t.datetime "updated_at",                     null: false
    t.string   "title"
    t.text     "body"
    t.string   "shortDescription"
  end

我在控制器和表单中添加了 shortDescription。当我转到 posts#create 时,出现以下错误。

未定义的方法`shortDescription'

现在我要回滚数据库,并创建 short_description。这不是一个大问题,但由于我对技术的好奇,我想知道如何使用 camelCase。 (也许有一天我需要使用 Rails 应用程序加入带有 camelCased 属性的数据库)。

感谢任何建议。谢谢!

【问题讨论】:

标签: ruby-on-rails ruby postgresql activerecord


【解决方案1】:

在 Postgres(以及 SQL 语言的 ISO/ANSI 标准中)中,对象名称不区分大小写。

所以objectNameobjectname 相同,在决定使用驼峰式名称时必须考虑到这一点。

您可以告诉 Postgres,您确实想使用区分大小写的名称 - 只需在名称周围添加双引号即可:"objectName"。请记住,稍后您将无法使用objectName 这样的对象,它只会尝试查找objectname 并且不会找到它,从而触发错误,因此必须使用双引号。

此外,在使用双引号区分大小写的对象名称时有一些小注意事项(例如,psql 的 \d 命令将列出您的对象,如下所示:"public.objectName",这不是真正正确的,正确的名称是"public"."objectName"等)。

在少数项目中,我有驼峰式的表/列名称,这总是有些痛苦,尤其是当新开发人员开始使用此类项目时。

所以我建议在 SQL 中始终使用带下划线的名称 (object_name)。

【讨论】:

    【解决方案2】:

    这是个坏主意。因为 postgresql 不区分大小写,所以这个字段会有很多问题。 所以,我认为您可以在迁移中使用 sql 查询创建这个 camelCase 字段。像这样:

    "some query text \""+"camelCaseName"+"\" end query text".
    

    【讨论】:

      猜你喜欢
      • 2015-01-25
      • 2017-02-13
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多