1

私が使用してきた宝石は、モデルにメソッドを追加します。最近、メソッド名が更新され、メソッド名の 1 つがモデルの既存のデータベース属性の 1 つと同じになりました。

gem を最新の状態に保ちたい場合、データベースの列の名前を変更し、すべてのコードを更新する以外に、この問題の回避策はありますか?

これをより具体的にするのに役立つ場合は、gem が PaperTrail であり、モデルにバージョン追跡を追加します。私のモデルには、version_name というデータベース内の既存の属性がありました。PaperTrail の最新バージョンは、別のメソッドの名前を定義するために PaperTrail によって使用される class_attribute version_name として追加されました。

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 メソッドが必要なときは *version_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 に答える