从Rails alias_attribute中获取原始方法/列名称

时间:2017-10-04 20:11:58

标签: ruby-on-rails

现在,我有一些带有不同命名列的遗留类,我通过Rails的alias_attribute将其别名为一个新的通用名称,如下所示:

class User < ActiveRecord::Base
  alias_attribute :id, :UserId
  ...
end

class Car < ActiveRecord::Base
  alias_attribute :id, :CarId
  ...
end

对于某些日志记录,我需要访问旧的列名(例如CarId和UserId)。是否有通过别名从alias_attribute访问旧名称的一般方法?重命名旧列并不理想,因为应用程序的许多其他部分仍在使用旧列名称。

1 个答案:

答案 0 :(得分:0)

alias_attribute是一种非常简单的方法。 All it does就是定义别名。

  def alias_attribute(new_name, old_name)
    # The following reader methods use an explicit `self` receiver in order to
    # support aliases that start with an uppercase letter. Otherwise, they would
    # be resolved as constants instead.
    module_eval <<-STR, __FILE__, __LINE__ + 1
      def #{new_name}; self.#{old_name}; end          # def subject; self.title; end
      def #{new_name}?; self.#{old_name}?; end        # def subject?; self.title?; end
      def #{new_name}=(v); self.#{old_name} = v; end  # def subject=(v); self.title = v; end
    STR
  end

所以不,没有办法检索原始列名。