rails中的postgresql数据库中的camelCase列(ActiveRecord)

时间:2017-07-22 10:54:31

标签: ruby-on-rails ruby postgresql activerecord

我有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。当我去帖子#create时,我收到以下错误。

未定义的方法`shortDescription'

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

任何建议表示赞赏。谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

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

此外,使用双引号区分大小写的对象名称时会有一些小的警告(例如,psql的\d命令将列出您的对象:"public.objectName",这不是真的正确,正确的名称是"public"."objectName",等等。

在少数项目中,我有骆驼式的表/列名称,总是有些痛苦,特别是当一个新的开发人员开始使用这样的项目时。

所以我建议在SQL中使用带下标记的名称(object_name)。

答案 1 :(得分:0)

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

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