2010-11-03 7 views
0

Je fais ce que je pensais être quelque chose de très simple: trouver un utilisateur et incrémenter un nombre entier.@ user.visit_count => méthode non définie

@user = User.where("created_at > ?", Time.now.midnight).select(:visit_count) 
@user.visit_count += 1 
@user.save(:validate=>false) 

je reçois l'erreur suivante:

undefined method `visit_count' for [#<ActiveLink visit_count: 1>]:ActiveRecord::Relation 

Cela semble être un Rails 3 chose - où vais-je tort?

+0

L'erreur se produit sur la ligne n ° 2. – sscirrus

+0

Pourquoi utilisez-vous à la fois où et sélectionnez dans votre requête? Et la première requête peut renvoyer un tableau d'utilisateurs que vous devez traiter différemment. – tommasop

+0

@tommasop - quel est le problème avec l'utilisation de select? Cela ne me donne-t-il pas seulement le nombre de visites des utilisateurs qui ont été créés récemment? Ou y a-t-il une meilleure façon de faire ce que je fais? – sscirrus

Répondre

0

Votre requête renvoie toujours plusieurs résultats en tant que tableau.

Ajoutez simplement .first pour être sûr que vous ne choisissez que le premier résultat.

@user = User.where("created_at > ?", Time.now.midnight).select(:visit_count).first 

Si vous souhaitez mettre à jour plusieurs enregistrements en même temps, regardez méthode update_all:

http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-update_all

Questions connexes