【问题标题】:rails attribute names camelcase issuerails属性名称驼峰问题
【发布时间】:2016-04-26 08:22:02
【问题描述】:

我有旧的 Sql Server 数据库和 Rails 应用程序。列名 数据库中的都是PascalCase (FirstName, CustomerId...).

我正在寻找一种在 Ruby 中使用 underscore_casing 的简单方法 数据库中的 PascalCasing。我想在 Rails 中写 first_name 用于数据库中的 FirstName 列。

camelize 和下划线会将字符串转换为所需的大小写

但我正在寻找更一般的东西,例如: ActiveRecord::Base.camelize_table_column_names = true

喜欢现有的 ActiveRecord::Base.pluralize_table_names

就像将 rjs 模板中的 Ruby 翻译成 JavaScript cameCase 约定。

【问题讨论】:

    标签: ruby-on-rails ruby activerecord camelcasing


    【解决方案1】:

    也许为所有定义的列名设置别名?

    column_names.each do |column_name|
      alias_attribute column_name.underscore, column_name
    end
    

    您可以将其添加到关注点中,并将该关注点包含在所有相关模型中。

    【讨论】:

    • +1,但是包含关注点可能会有一个小问题,如果表名与类名不匹配,这必须在设置table_name 之后发生。
    • 好点。尽管您也可以将该表名添加到关注点中。
    【解决方案2】:

    我认为没有一个选项可以开启这种行为。毕竟,Rails 遵循convention over configuration 原则,但并非所有内部约定都是可配置的。

    另一方面,您应该能够为所有列定义column aliases,例如:

    class Customer < ActiveRecord::Base
       alias_attribute :first_name, :FirstName
       # etc...
    end
    

    这样,Rails 应该透明地将下划线属性“翻译”为 CamelCase 属性:

    Customer.where(first_name: "John")
    # => SELECT `customers`.* FROM `customers` WHERE `customers`.`FirstName` = 'John'
    

    【讨论】:

      猜你喜欢
      • 2020-10-12
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 2014-03-14
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      相关资源
      最近更新 更多