2010-09-29 4 views
1

Je tente de créer une validation personnalisée pour un de mes modèles dans Rails 2.3.5, mais je continue à recieving l'erreur suivante à chaque fois que je lance ma suite de tests:Paginate lance erreur personnalisés Validations

`method_missing_without_paginate': undefined local variable or method `validates_progression' 

app/modèles/project.rb

class Project < ActiveRecord::Base 
    ... 
    validates_progression 

    def validates_progression 
     true # stubtastic! 
    end 
end 

Je ne peux pas sembler faire beaucoup de cette ~

Répondre

1

il ne fonctionne pas parce que vous définissez une méthode avec la portée d'instance et que vous essayez de l'appeler dans la portée de la classe. Vous avez deux alternatives:

instance Portée

class Project < ActiveRecord::Base 

    validate :validates_progression 

    def validates_progression 
    true # stub 
    end 

end 

scope Classe

class Project < ActiveRecord::Base 

    def self.validates_progression 
    true # stub 
    end 

    # Be sure to define this method before calling it 
    validates_progression 

end 

La seconde alternative ne fait pas vraiment de sens, sauf si vous voulez envelopper un autre filtre.

class Project < ActiveRecord::Base 

    def self.validates_progression 
    validates_presence_of :progression 
    validates_length_of ... 
    end 

    # Be sure to define this method before calling it 
    validates_progression 

end 

Sinon, utilisez la première solution.

1

La référence de pagination est un hareng rouge. L'indice est le «sans». La commande paginate gem a aliasé la méthode method_missing existante et l'a appelée method_missing_without_pagination. Donc, le problème est une erreur de méthode manquante standard.

La méthode est manquante car elle est a) non définie lorsque vous l'appelez et b) n'est pas dans la bonne portée (vous essayez d'appeler une méthode d'instance dans la portée de la classe).

Vous pouvez ajouter votre validation personnalisée en utilisant validate avec le symbole de votre méthode de validation:

validate :validates_progression 

def validates_progression 
    true 
end 
Questions connexes