Me doy cuenta de que esta no es necesariamente la forma más inteligente de hacerlo, pero ahora mi curiosidad está activa y tengo curiosidad cómo para hacerlo.Métodos dinámicos en un modelo de rieles
Tengo un modelo en el proyecto Rails. Lo llamaremos Deal. Por ActiveRecord y todas esas cosas interesantes hay columnas definidas en la base de datos como UPDATED_AT y se convierten en métodos en Deal: deal.updated_at => '04/19/1966 3:15 am '
Digamos que quería tener métodos que me dijo el día de la semana en lugar de todo el asunto de la fecha y el tiempo. Sé que existen métodos de la clase DateTime de modo que pueda hacer
deal.updated_at.day_of_week => 'Monday' (*)
pero lo que si sólo quería
deal.updated_day => 'Monday'
Puedo escribir en deal.rb
def update_day
self.updated_at.day_of_week
end
Entendido.
Pero lo que si quería que SIEMPRE he el método disponible para CUALQUIER columna de fecha que se ha añadido al modelo?
Vi definir_metodo por ahí (algunos aquí en StackOverflow). Entonces entiendo eso. Pero me gustaría llamarlo justo después de ActiveRecord hizo su magia, ¿verdad? Por lo tanto, si mi modelo de Deal tuviera updated_at, created_at, offered_at y lawsuit_at, me gustaría que coincidan los métodos para cada uno. Más importante aún, si vino otro desarrollador y agregué una columna llamada scammed_at, me gustaría crear scammed_day junto con el método scammed_at.
¿Cómo podría hacer eso?
Gracias.
(*) Uh, o algo así, siempre miro esa llamada.
Debería ajustar la llamada 'define_method' en un condicional' if column.name = ~/_at $/'. –
Definitivamente tiene razón, corrección añadida, gracias – apneadiving
Entonces, si solo agrego eso en el archivo de modelo, supongo que después de mis otras declaraciones de def de método, se cargará después de que la base de datos defina las columnas. Eso es exactamente lo que quiero. –