Rails - Alias_method_chain com um método 'attribute ='
-
21-09-2019 - |
Pergunta
Eu gostaria de 'adicionar' algum código no método de um modelo por meio de um módulo, quando ele está incluído. Eu acho que devo usar o alias_method_chain, mas não sei como usá -lo, já que meu 'método de alias' é um daqueles métodos que terminam no sinal '=':
class MyModel < ActiveRecord::Base
def foo=(value)
... do stuff with value
end
end
Então é isso que meu módulo parece agora:
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
Eu recebo um erro na definição da função. Como contornar isso?
Solução
alias_method_chain
é um método simples de duas linhas:
def alias_method_chain( target, feature )
alias_method "#{target}_without_#{feature}", target
alias_method target, "#{target}_with_#{feature}"
end
Eu acho que a resposta que você deseja é simplesmente fazer os dois alias_method
chama a si mesmo neste caso:
alias_method :foo_without_bar=, :foo=
alias_method :foo=, :foo_with_bar=
E você definiria seu método como assim:
def foo_with_bar=(value)
...
end
Os símbolos de rubi processam a trilha =
e ?
de nomes de métodos sem um problema.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow