2016-04-26 15 views
3

Ich habe Legacy Sql Server-Datenbank und Rails-Anwendungen. Spaltennamen in der Datenbank sind alle in Pascal (FirstName, CustomerId...).Schienen Attributnamen Camelcase Problem

Ich bin für eine einfache Möglichkeit suchen underscore_casing in Ruby und PascalCasing in der Datenbank zu verwenden. Ich möchte first_name in Rails für Vorname-Spalte in der Datenbank schreiben.

camelize und unterstreichen wird eine Zeichenfolge erforderlich Gehäuse

konvertieren, aber ich bin auf der Suche nach etwas allgemeinere wie: ActiveRecord::Base.camelize_table_column_names = true

wie bestehenden ActiveRecord::Base.pluralize_table_names

Genau wie Ruby übersetzt in rjs Vorlagen zu JavaScript cameCase Konvention.

Antwort

1

Ich glaube nicht, dass es eine einzige Option gibt, die ein solches Verhalten einschalten würde. Schienen gehorcht schließlich dem Prinzip convention over configuration, aber nicht alle internen Konventionen sind konfigurierbar.

Auf der anderen Seite sollten Sie, zB für alle Ihre Spalten definieren column aliases Lage:

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

Auf diese Weise Rails sollte transparent „übersetzen“ die Unterstreichungsattribute diejenigen Camelcase:

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

Vielleicht Aliasnamen für alle definierten Spaltennamen einrichten?

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

Sie könnten dies zu einem Anliegen hinzufügen und dieses Problem in allen relevanten Modellen berücksichtigen.

+0

+1, aber es könnte ein kleines Problem mit der Einbeziehung der Bedenken geben, dies muss passieren, nachdem 'table_name' gesetzt ist, wenn der Tabellenname nicht mit dem Klassennamen übereinstimmt. – Slicedpan

+0

Guter Punkt. Sie können das Tabellenname-Bit jedoch auch nur zum Anliegen hinzufügen. –