Cómo utilizar un método de gemas (devolver cadenas) como validación personalizada en la aplicación rails

Soy nuevo en RoR / Gems, esta es una pregunta básica.

Creé una gema, MyNameGem, para aprender el proceso. Contiene estos métodos:

def returnValidationString1
  puts 'Validation String'
end
def returnValidationString2
  puts 'ANother Validation String'
end

Incluí la gema en una aplicación de rieles simple, todo parece funcionar como se esperaba. Yo esto a mi modelo:

validates :name => MyNameGem.returnValidationString1

Lo que estoy tratando de crear es una joya que puedo usar dentro de una rutina de validación. Entonces, por ejemplo, quiero hacer esto: validates: name => (llamar a mi método de gema, devolver una cadena y usar esa cadena como requisito de validación)

preguntado el 16 de mayo de 11 a las 20:05

2 Respuestas

La función de puts es poner cosas en la consola, así que eso es exactamente lo que hará. Sin embargo, lo que está haciendo su llamada de validación es algo inusual y no parece tener ningún sentido. Su código se evalúa como:

validates :name => (puts "MyNameGem")

Eso realmente no significa nada. puts generalmente regresa nil.

Si desea escribir una rutina de validación personalizada que se almacene en una gema, esa es una pregunta diferente.

contestado el 17 de mayo de 11 a las 00:05

Veo lo que estás diciendo. Lo que estoy tratando de crear es una joya que puedo usar dentro de una rutina de validación. Entonces, por ejemplo, quiero hacer esto: validates: name => (llamar a mi método de gema, devolver una cadena y usar esa cadena como requisito de validación) - user756289

Puedo entender lo que estás diciendo, pero eso simplemente no funcionará. Asi no es como validates espera recibir argumentos. Puede devolver un Hash si lo desea, eso funcionaría mejor: validates :name, MyGem.my_method por ejemplo. - tadman

puts solo imprime a la consola.

si desea devolver 'MyNameGem' escriba return 'MyNameGem' o simplemente 'MyNameGem porque la última línea se devuelve automáticamente.

contestado el 17 de mayo de 11 a las 00:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.