Estoy tratando de obtener un buen estilo de codificación de Ruby. Para evitar llamar accidentalmente a una variable local con el mismo nombre, siempre estoy usando self.
cuando corresponda. Pero ahora me tropecé con esto:Llamar a un método privado xxx usando self.xxx() desde otro método privado que da como resultado el error "método privado` xxx 'llamado "
class MyClass < ActiveRecord::Base
before_validation :sanitize_user_data
private
def sanitize_user_data
self.sanitize_name # with ".self" it's a problem, without it's not!
end
def sanitize_name
unless self.name.nil?
self.name.gsub!(/\s+/, ' ')
self.name.strip!
end
end
end
Los resultados de código anterior en un error
método privado llamado
sanitize_name
pero al retirar self.
y simplemente usando sanitize_name
, funciona. ¿Porque eso?
Gracias por la explicación. Tendré esto en cuenta, pero supongo que para entenderlo realmente, tendría que profundizar en los aspectos internos de Ruby, ¿verdad? –
@JoshuaMuheim No necesariamente, es solo la forma en que funcionan los métodos privados, al prohibir un receptor explícito no se puede llamar desde cualquier lugar donde el receptor implícito no es el mismo 'yo', simplemente tiene el efecto secundario desafortunado de impedirte llamando a un método privado con el mismo receptor explícito que el receptor implícito. –
Bien, eso es interesante. Muchas gracias por explicarme. :) –