问题
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'
来源:https://stackoverflow.com/questions/36859240/rails-attribute-names-camelcase-issue