A partir de Rails 3.1 la sintaxis se simplifica un poco a ActiveSupport: : preocupación:
ahora que se puede hacer
require 'active_support/concern'
module M
extend ActiveSupport::Concern
included do
scope :disabled, where(:disabled => true)
end
module ClassMethods
...
end
end
ActiveSupport :: La preocupación también arrasa en las dependencias del módulo incluido, here is the documentation
[actualización, dirigiéndose de aceofbassgreg comentario]
Los rieles 3.1 y posteriores ActiveSupport :: La preocupación permite una inclusión métodos de instancia del módulo que se incluirán directamente , por lo que no es necesario crear un módulo InstanceMethods dentro del módulo incluido. Además, ya no es necesario en Rails 3.1 y posteriores para incluir M :: InstanceMethods y extender M :: ClassMethods. Así podemos tener código más simple como esto:
require 'active_support/concern'
module M
extend ActiveSupport::Concern
# foo will be an instance method when M is "include"'d in another class
def foo
"bar"
end
module ClassMethods
# the baz method will be included as a class method on any class that "include"s M
def baz
"qux"
end
end
end
class Test
# this is all that is required! It's a beautiful thing!
include M
end
Test.new.foo # ->"bar"
Test.baz # -> "qux"
¿Se puede definir la validación y la relación de esta manera? – CantGetANick
No puedo decir el 100%, pero no puedo pensar por qué no. –
Yap, Y funciona. Gracias por el ejemplo. – CantGetANick