Ruby on Rails:是否可以使用基于Camel的数据库字段和表名?

时间:2011-04-28 16:57:04

标签: ruby-on-rails

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

3 个答案:

答案 0 :(得分:2)

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

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

set_table_name "camelCaseName" 
set_primary_key "cameCaseIdName" 

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

alias "camelCaseFieldName", "field_name"

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

has_many :comments, :foreign_key_id => "commentCamelCaseID"

这比平常更多,但有可能。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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