2011-07-31 8 views
6

He visto muchas publicaciones con el indicador -W0 como respuesta a este problema, pero no quiero suprimir todas las advertencias, solo advertencias de un valor particular.Suprimir una advertencia particular en Ruby

Estoy ejecutando una aplicación que no es de rieles (que usa ActiveRecord, no obstante) en Ruby 1.8.7. Quiero seguir todas las advertencias excepción de los siguientes Deprecation ADVERTENCIA:

Object#id will be deprecated; use Object#object_id

Si eso no es posible, me gustaría echar por la borda todos los avisos de obsolescencia. Java, al menos, te permite hacer esto. ¿Qué hay de Ruby?

Actualización: He enviado dos respuestas, pero he comprobado la que los buscadores posteriores esperarán encontrar aquí.

+1

¿Por qué no dejas de usar 'Object id id'? – jtbandes

+1

¿Es inviable cambiar la llamada a método a #object_id? –

+0

No va a funcionar. El objeto en mente es una instancia de ActiveRecord, así que en realidad estoy buscando el atributo 'Id' de ActiveRecord. – JellicleCat

Respuesta

9

Si hay una sección de código específica que produce las advertencias, podría intentar mezclar en el módulo del kernel de ActiveSupport y se envuelve con un bloque silence_warnings (ejemplo tirado directamente de la RDoc):

silence_warnings do 
    value = do_something_that_causes_warning # no warning voiced 
end 

noisy_call # warning voiced 

Es es absolutamente necesario suprimirlo? No es que se está compilando algo y tiene que tamizar a través de un montón de advertencias todos a la vez ...

+1

No estoy compilando, de hecho, pero me gusta tener un registro limpio porque he recurrido a mis archivos de registro muchas veces – JellicleCat

+0

Punto justo. Todavía estoy interesado en por qué es difícil cambiar el nombre del método, especialmente porque devuelve el mismo valor que el original. ¿Es esto algún tipo de aplicación heredada? ¿Dependencia que no puedes modificar/probar? –

+0

El uso de 'object_id' es un no-go porque no estoy buscando el object_id, sino que estoy buscando el valor del atributo 'id'. El objeto en mente es una instancia de ActiveRecord. – JellicleCat

3

Editar: Si utiliza read_attribute(:id), a continuación, se debe evitar el tener cuidado con el. Gracias Jeremy!

No soy desarrollador de Rails, pero ¿no hay un método que le permite decir "Quiero el campo de la base de datos id, no el método id del objeto"?

+0

'read_attribute (: id)' –

Cuestiones relacionadas