1

可能重复:
Rails 中列名的别名

我正在编写一个 ActiveRecord 模型模块来访问 MySQL 遗留数据库。我的问题是数据库的列命名约定如下所示:groupID, metaGroupName, flagName. 有没有一种简单的方法可以使模型与这种命名约定很好地配合?

更新:如果可能的话 ,我想避免这种alias_attribute方法。它不是一个小型数据库,而且要别名的列会很多。ActiveRecord 中是否有一种方法可以解释我可以覆盖的列名?

4

2 回答 2

2

你不想重复自己——这很好。幸运的是,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::Basealias_columns

于 2012-08-02T03:11:53.233 回答
1

只需将以下内容添加到您的模型中

alias_attribute :new_column_name, :myLegacyColumnName
于 2012-08-02T01:14:03.290 回答