Una manera posible es poner métodos compartidos en un module
como esto (RAILS_ROOT/lib/shared_methods.rb
)
module SharedMethods
def is_public?
# your code
end
end
Luego hay dos incluir este módulo en cada modelo que debe tener estos métodos (es decir app/models/your_model.rb
)
class YourModel < ActiveRecord::Base
include SharedMethods
end
ACTUALIZACIÓN:
En los carriles 4 hay un new way para hacer esto. Usted debe colocar el código compartido como este en app/models/concerns
lugar de lib
También puede agregar métodos de clase y ejecutar código en la inclusión como esto
module SharedMethods
extend ActiveSupport::Concern
included do
scope :public, -> { where(…) }
end
def is_public?
# your code
end
module ClassMethods
def find_all_public
where #some condition
end
end
end
pero que tendría que pasar una variable diciendo la método qué clase estoy usando ... – NullVoxPopuli
self.class le daría cualquiera que sea la clase en el contexto de ese método que se llama. Entonces, por ejemplo, si hicieras YourModel.new.is_public ?, self.class sería YourModel. – lambdabutz