rails attribute names camelcase issue

2019-05-12 04:24发布

问题:

I have legacy Sql Server database and Rails applications. Column names in database are all in PascalCase (FirstName, CustomerId...).

I'm searching for an easy way to use underscore_casing in Ruby and PascalCasing in database. I would like to write first_name in Rails for FirstName column in database.

camelize and underscore will convert a string to required casing

but I'm looking for something more general like: ActiveRecord::Base.camelize_table_column_names = true

like existing ActiveRecord::Base.pluralize_table_names

Just like translating Ruby in rjs templates to JavaScript cameCase convention.

回答1:

Maybe set up aliases for all defined column names?

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

You could add that to a concern and include that concern in all relevant models.



回答2:

I don't think there is a single option that would switch on such behavior. Rails, after all, obeys the convention over configuration principle but not all internal conventions are configurable.

On the other hand you should be able to define column aliases for all of your columns, e.g:

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

This way Rails should transparently "translate" the underscore attributes to CamelCase ones:

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