alias_attribute and withingの属性名を使用したメソッドはループを引き起こします
-
05-10-2019 - |
質問
私のモデルの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_method
と alias_attribute
. alias_method 実際にaを作ります コピー 古い方法の、一方 alias_attribute 新しい方法を定義するだけです 古いものに電話してください.
ご了承ください model.attribute
と model.attribute=
ActiverCordの方法は、単に呼び出します read_attribute と write_attribute, 、そのため、ゲッターやセッターをオーバーライドしても、常に属性にアクセスできます。
define_method "#{attribute_name}" do
filter_words(self.read_attribute(attribute_name))
end
所属していません StackOverflow