2016-04-26 42 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

好点。尽管您可以将该表名称添加到关注中。 –