5

モジュールを含むモデルがあります。モジュール内でモデルのアクセサ メソッドをオーバーライドしたいと考えています。

例えば:

class Blah < ActiveRecord::Base
  include GnarlyFeatures
  # database field: name
end

module GnarlyFeatures
  def name=(value)
    write_attribute :name, "Your New Name"
  end
end

これは明らかに機能しません。これを達成するためのアイデアはありますか?

4

1 に答える 1

8

コードは正しいようです。この正確なパターンを問題なく使用しています。

私の記憶が正しければ、Railsは属性セッターに#method_missingを使用するため、モジュールが優先され、ActiveRecordのセッターがブロックされます。

ActiveSupport :: Concernを使用している場合(このブログ投稿を参照してください。インスタンスメソッドは特別なモジュールに入る必要があります:

class Blah < ActiveRecord::Base
  include GnarlyFeatures
  # database field: name
end

module GnarlyFeatures
  extend ActiveSupport::Concern

  included do
    def name=(value)
      write_attribute :name, value
    end
  end
end
于 2012-05-03T18:00:36.700 に答える