【问题标题】:Ruby on Rails: Is it possible to use Camel-cased database field and table names?Ruby on Rails:是否可以使用 Camel 大小写的数据库字段和表名?
【发布时间】:2011-04-29 01:21:49
【问题描述】:

数据库表和字段名称的Ruby on Rails 约定是snake_case,而不是CamelCase。但是,我有一个 PHP 应用程序正在使用的现有数据库。我想编写一个与该数据库交互的 Rails 应用程序。是否有一种简单的“Rails 方式”来使用 CamelCase 数据库表和字段名称与数据库进行交互?

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

简短的回答是肯定的,但并不总是比将旧数据库迁移到新数据库更容易。如果您希望两个应用程序能够使用同一个数据库,那么这可能是最快速的方法。

您可以通过执行以下操作来覆盖表和外键字段:

set_table_name "camelCaseName" 
set_primary_key "cameCaseIdName" 

如有必要,您也可以为所有字段名称设置别名:

alias "camelCaseFieldName", "field_name"

所有的 AR 关系也可以设置主键字段。

has_many :comments, :foreign_key_id => "commentCamelCaseID"

这比正常工作要多,但这是可能的。

【讨论】:

    【解决方案2】:

    当然。在您的模型中,只需像这样定义您的表:

    class FooBar < ActiveRecord::Base
      self.table_name = "FooBar"
    end
    

    字段名称也是如此,您可以在迁移或架构中定义。您可以指定任何您喜欢的名称。除非你想覆盖默认机制,否则需要做更多的工作,但它仍然是可能的:

    create_table "products", :force => true do |t|
      t.column "shop_id",    :integer
      t.column "creator_id", :integer
      t.column "name",       :string,   :default => "Untitled"
      t.column "value",      :string,   :default => "Untitled"
      t.column "created_at", :datetime
      t.column "updated_at", :datetime
    end
    

    欲了解更多信息,请参阅Table Definitions

    【讨论】:

      【解决方案3】:

      对于数据库表名,您可以使用 set_table_name

        class Dog < ActiveRecord::Base
          set_table_name 'dog'
        end
      

      对于您可以覆盖访问器的字段。 希望有用。再见

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-08
        • 1970-01-01
        • 1970-01-01
        • 2012-07-06
        • 1970-01-01
        • 2014-07-14
        相关资源
        最近更新 更多