Bolo :
Oui tu as raison normalement je devrais faire ca dans le model Faq. J’ai
modifié mon code en fonction de tes indications.
mon model faq
class Faq < ActiveRecord::Base
#doit avoir un id de type entier
validates_presence_of :question_fr, :reponse_fr, :faq_category_id
#se réfère a une catégories
belongs_to :faq_categories
ça marche ça ? as-tu testé unitairement cette ligne de code ?
end
Alors là , ces 5 lignes de code me plongent dans un puits de perplexité.
1/ Soit la ligne de commentaire est juste.
Dans ce cas là , le nom de la méthode est faux
dans le code, tu ne fais rien de la collection de commentaires retournée
par Comment.find, donc cette ligne ne sert à rien si ce n’est à faire
une
requête inutile vers la BD.
La deuxième ligne est fausse car ça retourne le nombre de commentaires
dans son ensemble.
LÃ deux sous-cas,
a) le commentaire est juste, mais imprécis : “retourne le nombre de
commentaires
non approuvés pour une instance de Faq donnée”.
dans ce cas là , ce serait un truc du genre :
comments.count(“approved = false”)
Et un tit test unitaire pour vérifier que ça marche.
b) le commentaire est en fait : “retourne le nombre de commentaires
non approuvés en général”, le code serait alors
Comment.count(“approved = false”)
mais alors là , cette méthode n’a strictement rien à voir avec le modèle
Faq et n’a donc rien à faire là .
Dans tous ces cas précédents, le nom de la méthode est incorrect
et peut induire en erreur.
2/ Le commentaire est faux, la méthode porte bien son nom, on veut
récupérer une collection de commentaires. Le #count ne sert donc à rien.
a) collection pour une instance de Faq donnée, la première ligne est
donc fausse.
comments.find(:all, :conditions => [“approved = false”])
b) collection dans sa globalité. Là encore, aucun rapport avec la
choucroute
(ie Faq) et cette méthode devrait se trouver dans un autre modèle.
Dans tous les cas, c’est à corriger.
validates_presence_of :nom, :message
mon controller votes
def create
@faq = Faq.find params[:faq_id]
@faq.votes << Vote.new(:ip => request.remote_ip,:score =>
params[:score])
@faq.score = @faq.calculate_score
@faq.save!
end
mais malheureusement ca me retourne rien
Quelques pistes :
1/ tu n’utilises pas correctement #calculate_score (qui devrait
effectivement
se rebaptiser #calculate_score!
2/ tu n’as pas testé unitairement cette méthode, avant de l’utiliser
“en contexte”
(ie dans une action)
3/ Tu devrais débugger avec script/console comme j’ai dû te le suggérer
déjà .
– Jean-François.