可能重复:
Rails 中列名的别名
我正在编写一个 ActiveRecord 模型模块来访问 MySQL 遗留数据库。我的问题是数据库的列命名约定如下所示:groupID
, metaGroupName
, flagName
. 有没有一种简单的方法可以使模型与这种命名约定很好地配合?
更新:如果可能的话
,我想避免这种alias_attribute
方法。它不是一个小型数据库,而且要别名的列会很多。ActiveRecord 中是否有一种方法可以解释我可以覆盖的列名?
可能重复:
Rails 中列名的别名
我正在编写一个 ActiveRecord 模型模块来访问 MySQL 遗留数据库。我的问题是数据库的列命名约定如下所示:groupID
, metaGroupName
, flagName
. 有没有一种简单的方法可以使模型与这种命名约定很好地配合?
更新:如果可能的话
,我想避免这种alias_attribute
方法。它不是一个小型数据库,而且要别名的列会很多。ActiveRecord 中是否有一种方法可以解释我可以覆盖的列名?
你不想重复自己——这很好。幸运的是,Ruby 让它变得相当容易。尝试以下操作:
class Model < ActiveRecord::Base
column_names.each do |cn|
alias_attribute cn.underscore.intern, cn
end
end
然后,我将其分解为Module
可能是这样的:
module AliasLegacyColumns
extend ActiveSupport::Concern
included do
column_names.each {|cn|
alias_attribute cn.underscore.intern, cn
}
end
end
然后根据需要将其包含在您的模型中。为了进一步改进,我将提供一个alias_columns
类级方法,该方法接受参数,例如,:include
您可以对所述模块:exclude
进行猴子补丁,但仅根据模型的需要调用。ActiveRecord::Base
alias_columns
只需将以下内容添加到您的模型中
alias_attribute :new_column_name, :myLegacyColumnName