1

我一直在使用的 gem 为模型添加了方法。它最近更新了它的方法名称,使得其中一个方法名称现在与我的模型预先存在的数据库属性之一相同。

如果我希望与 gem 保持同步,除了重命名我的数据库中的列并更新我的所有代码之外,是否有任何解决此问题的方法?

如果有帮助,为了更具体,gem 是 PaperTrail,它为模型添加了版本跟踪。我的模型在数据库中有一个名为 version_name 的预先存在的属性,最新版本的 PaperTrail 刚刚添加为一个 class_attribute version_name,PaperTrail 使用它来定义另一个方法的名称。

4

1 回答 1

1

对 PaperTrail 不太熟悉(尽管我一直想研究它)。假设 PaperTrail 没有更改 *version_name* 名称的配置选项,您可能可以在模型中以这种方式绕过它:

class Thingy
  def version_name_attr
    attributes['version_name']
  end

  def version_name_attr=(val)
    attributes['version_name'] = val
  end
end

只要你想访问你的属性,只需使用 *version_name_attr* ,当你想要 PaperTrail 方法时使用 *verson_name* 。

这样的东西有点干净,但如果 PaperTrail 在内部使用 *version_name* 可能会破坏事情。

class Thingy
  alias_method :paper_trail_version_name, :version_name
  def version_name
    attributes['version_name']
  end
end

在这种情况下,如果需要 PaperTrail 方法,请使用 *paper_trail_version_name*。对您的属性的访问将保持您所期望的状态。

于 2011-09-28T20:43:44.580 回答