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?

È stato utile?

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
scroll top