Rails - alias_method_chain con un metodo 'attribute="
-
21-09-2019 - |
Domanda
Mi piacerebbe "aggiungere" del codice sul metodo di un modello tramite un modulo, quando è incluso.Penso che dovrei usare alias_method_chain, ma non so come usarlo, poiché il mio 'metodo aliased' è uno di quei metodi che terminano con il segno '=':
class MyModel < ActiveRecord::Base
def foo=(value)
... do stuff with value
end
end
Quindi questo è ciò che il mio modulo appare in questo momento:
module MyModule
def self.included(base)
base.send(:include, InstanceMethods)
base.class_eval do
alias_method_chain 'foo=', :bar
end
end
module InstanceMethods
def foo=_with_bar(value) # ERROR HERE
... do more stuff with value
end
end
end
Ottengo un errore nella definizione della funzione.Come aggirare questo problema?
Soluzione
alias_method_chain
è un metodo semplice a due righe:
def alias_method_chain( target, feature )
alias_method "#{target}_without_#{feature}", target
alias_method target, "#{target}_with_#{feature}"
end
Penso che la risposta che vuoi sia semplicemente fare i due alias_method
ti chiami in questo caso:
alias_method :foo_without_bar=, :foo=
alias_method :foo=, :foo_with_bar=
E definiresti il tuo metodo in questo modo:
def foo_with_bar=(value)
...
end
I simboli rubino elaborano il finale =
E ?
dei nomi dei metodi senza problemi.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow