2009-08-10 9 views
2

Je ne sais pas comment "métater" cette méthode, mais je sais que cela devrait être simple. La méthode ressemble à ceciAide Meta-programmation en Ruby: Écrasement Activerecord Setters

def check_sent=(value) 
     Date.parse(value) rescue @dates_bad = true 
     self.write_attribute(:check_sent, value) 
    end 

Ceci est pour une sous-classe ActiveRecord. Je voudrais avoir ces méthodes pour tous les champs que je spécifie. Y a-t-il un moyen de le faire dans Ruby?

Répondre

3
class Foo < ActiveRecord::Base 
    def self.define_date_setters(*fields) 
    fields.each do |field| 
     define_method("#{ field }=") do |value| 
     Date.parse(value) rescue @dates_bad = true 
     self.write_attribute(field, value) 
     end 
    end 
    end 

    define_date_setters :check_sent, :other_field, :yet_another_field 
end 

Si vous avez besoin de cette fonctionnalité pour plus d'une classe, vous pouvez déplacer define_setters dans un module que vous étendez vos classes avec.

+0

Wow. Je vais vérifier cela maintenant. Merci pour la réponse rapide. –

+0

D'accord, c'est génial et ça fonctionne parfaitement. Je suppose que je pourrais le faire automatiquement pour tous les champs de date, mais cela me semble un peu ennuyeux. –

Questions connexes