2016-04-26 54 views
3

我有遺留的Sql Server數據庫和Rails應用程序。在數據庫列名 都在PascalCase (FirstName, CustomerId...).rails屬性名稱camelcase問題

我在尋找一種簡單的方法來使用Ruby的underscore_casing和 PascalCasing數據庫。我想在Rails 中寫入first_name作爲數據庫中的FirstName列。

camelize,並強調將一個字符串轉換成所需的套

,但我在尋找更多的東西一般這樣的: ActiveRecord::Base.camelize_table_column_names = true

像現有 ActiveRecord::Base.pluralize_table_names

就像在RJS模板翻譯紅寶石to JavaScript cameCase 約定。

回答

1

我不認爲有一個選項可以打開這樣的行爲。畢竟,Rails遵循原則,但並不是所有的內部約定都是可配置的。

在另一方面,你應該能夠定義column aliases您的所有列,例如:

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

這樣的Rails應該透明地「翻譯」下劃線屬性駝峯的:

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

也許爲所有定義的列名設置別名?

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

您可以將其添加到關注點,並在所有相關模型中包含該關注點。

+0

+1,但包含關注可能存在一個小問題,如果表名與類名不匹配,則必須在設置table_name後發生。 – Slicedpan

+0

好點。儘管您可以將該表名稱添加到關注中。 –