ruby-on-rails - ejemplos - ruby on rails descargar
Rails ActiveSuppport: Preocupación y métodos privados (2)
Esta es una gran idea acerca de la preocupación en los carriles: http://37signals.com/svn/posts/3372-put-chubby-models-on-a-diet-with-concerns
Y también es una buena idea crear métodos muy pequeños que no formen parte de una API pública. Sin usar preocupaciones, esos se convierten en métodos privados en una clase de rubíes.
¿Tiene sentido crear métodos privados dentro de un módulo Rails ActiveSupport :: Concern? Si es así, ¿funciona privado tanto para los métodos de instancia regular como para los métodos de clase en la definición de preocupación?
¿Tiene sentido crear métodos privados dentro de un
ActiveSupport::Concern
RailsActiveSupport::Concern
?
Teniendo en cuenta que las preocupaciones son módulos inteligentes que eventualmente se incluirán en otras clases, sí, lo hace. Es solo un código portátil, un comportamiento extraíble y me gustaría considerarlo como parte de mi controlador (o modelo, etc.) a medida que lo escribo. Así que, básicamente, simplemente declara los métodos private
o protected
como lo haría normalmente.
Tal vez la publicación que vinculó se haya actualizado desde 2013, pero DHH hace exactamente eso en uno de los ejemplos:
module Dropboxed
extend ActiveSupport::Concern
included do
before_create :generate_dropbox_key
end
def rekey_dropbox
generate_dropbox_key
save!
end
private # <- Let''s list some privates
def generate_dropbox_key
self.dropbox_key = SignalId::Token.unique(24) do |key|
self.class.find_by_dropbox_key(key)
end
end
end
En cuanto a private
métodos de clase private
, estoy de acuerdo con @Hugo y nunca los usé, pero aquí es cómo puedes lograr esto:
module Dropboxed
extend ActiveSupport::Concern
included do
private_class_method :method_name
end
module ClassMethods
def method_name
end
end
end
Es solo mi opinión, pero en este momento me estoy rascando la cabeza con respecto al método de clase privada, ¿para qué sirven? De todos modos, si realmente los necesita, consulte esta publicación: ¿Cómo crear un método de clase privada?
Tiene sentido tener métodos de instancia privados en un módulo de preocupación y funcionará bien. Los métodos de clase privada también funcionarán bien pero siguiendo la publicación mencionada anteriormente.