alias_attribute and withingの属性名を使用したメソッドはループを引き起こします

StackOverflow https://stackoverflow.com/questions/2924153

質問

私のモデルの1つの属性にメソッドチェーンを動的に作成しようとしています。今では私はこの機能を持っています:

def create_filtered_attribute(attribute_name)
          alias_attribute "#{attribute_name}_without_filter", attribute_name

          define_method "#{attribute_name}" do
            filter_words(self.send("#{attribute_name}_without_filter"))
          end
end

だから私は属性名の文字列を受け取り、それをエイリアスします '_without_filter'(alias_methodまたはalias_method_chainはここで失敗します。クラスが作成されたときに属性が存在しないため)。

しかし、どういうわけか、私が電話するとき "#{aTtribute_name} _without_filter" それは私の新しい方法を呼び出します(Alias_Attribute how Howから)、プログラムはスタックループに入ります。

私はその属性の名前を変更しようとしているので、その名前をメソッドに使用できます...

誰かがこれについて私を啓発してくれませんか。

役に立ちましたか?

解決

には違いがあります alias_methodalias_attribute. alias_method 実際にaを作ります コピー 古い方法の、一方 alias_attribute 新しい方法を定義するだけです 古いものに電話してください.

ご了承ください model.attributemodel.attribute= ActiverCordの方法は、単に呼び出します read_attributewrite_attribute, 、そのため、ゲッターやセッターをオーバーライドしても、常に属性にアクセスできます。

  define_method "#{attribute_name}" do
    filter_words(self.read_attribute(attribute_name))
  end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top