J'essaie d'utiliser le code ci-dessous pour étendre l'enregistrement actif afin que ma classe de commande soit un peu plus propre. Cela ne fonctionne cependant pas.ActiveRecord :: Extension de base ne fonctionne pas
class ActiveRecord::Base
def self.has_statuses(*status_names)
validates :status,
:presence => true,
:inclusion => { :in => status_names}
status_names.each do |status_name|
scope "all_#{status_name}", where(:status => status_name)
end
status_names.each do |status_name|
define_method "#{status_name}?" do
status == status_name
end
end
end
end
En environment.rb je requiers l'extension ci-dessus avec
require "#{Rails.root}/lib/active_record_extensions.rb"
Si je d'autre part crée une classe de base abstraite OrderBase et laisser mon Hériter de la classe de commande à partir de ce lieu qu'il fonctionne comme prévu . Que dois-je faire pour que mon patch de singe "prenne"?
EDIT: J'ai oublié de mentionner que je reçois un message indiquant la méthode manquante pour has_statuses.
EDIT2: Le code ci-dessus fonctionne dans la console (rails c), mais il ne fonctionne pas dans le test
EDIT3: J'ai changé l'environnement/test.rb à config.cache_classes = faux et qui semble faire l'affaire. De toute évidence, il y a beaucoup à apprendre :)
Cela fonctionne en fait pour moi, comment utilisez-vous cette méthode? – seeingidog
J'essaye de l'employer dans ma classe d'ordre comme: has_statuses: a créé,: in_progress,: a expédié etc. pour garder la classe propre. – mhenrixon
@seeingidog err maintenant il travaille pour moi aussi et je n'ai aucune idée de ce qui est différent .... J'ai évidemment fait quelque chose mais je ne sais pas quoi. Postez une réponse en disant que cela devrait fonctionner et je vais marquer cela comme la réponse! – mhenrixon