Classement

J’ai une table “recettes” dans laquel il existe un champs user_id qui
renseigne l’id de user pour chaque recette.
J’aimerais sur ma page d’acceuil affiché le nom des 5 users les plus
influents, comment indiquer a ruby de compter le nombre de recette qu’a
poster les users et de les classer du plus petit au plus grand?
Dans mon controller j’ai deja ceci pour mon index ( car j’affiche les 3
dernieres recettes postées)

@recette_pages, @recettes = paginate :recettes, :order_by => ‘id
DESC’, :per_page => 3

Encore merci a vous de m’avoir vraiment “débloqué” pour les autres
questions…

On 7/10/07, Gary B.attar [email protected] wrote:

J’ai une table “recettes” dans laquel il existe un champs user_id qui
renseigne l’id de user pour chaque recette.
J’aimerais sur ma page d’acceuil affiché le nom des 5 users les plus
influents, comment indiquer a ruby de compter le nombre de recette qu’a
poster les users et de les classer du plus petit au plus grand?
Dans mon controller j’ai deja ceci pour mon index ( car j’affiche les 3
dernieres recettes postées)

Je pense que le plus simple est d’utiliser un peu de SQL

User.find :all, :select => ‘COUNT(recettes.id)’, :join => ‘recettes’,
:limit => 5, :group => ‘users.id’

Je n’ai pas testé en live, mais ca doit s’approcher un peu du concept.


Cyril M.

On 7/10/07, Cyril M. [email protected] wrote:

Je pense que le plus simple est d’utiliser un peu de SQL

User.find :all, :select => ‘COUNT(recettes.id)’, :join => ‘recettes’,
:limit => 5, :group => ‘users.id’

J’ai oublié le ORDER_BY

User.find :all, :select => ‘*, COUNT(recettes.id) as nb_recette’,
:join => ‘recettes’, :limit => 5, :group => ‘users.id’, :order =>
‘nb_recette ASC’


Cyril M.

Merci cyril, voici l’erreur obtenu ( probleme au parametre :group):

Mysql::Error: #42S22Unknown column ‘users.id’ in ‘group statement’:
SELECT *, COUNT(recettes.id) as nb_recette FROM users recettes GROUP
BY users.id ORDER BY nb_recette ASC LIMIT 5

Cyril M. wrote:

On 7/10/07, Cyril M. [email protected] wrote:

Je pense que le plus simple est d’utiliser un peu de SQL

User.find :all, :select => ‘COUNT(recettes.id)’, :join => ‘recettes’,
:limit => 5, :group => ‘users.id’

J’ai oubli� le ORDER_BY

User.find :all, :select => ‘*, COUNT(recettes.id) as nb_recette’,
:join => ‘recettes’, :limit => 5, :group => ‘users.id’, :order =>
‘nb_recette ASC’


Cyril M.

Gary :

J’ai une table “recettes” dans laquel il existe un champs
user_id qui renseigne l’id de user pour chaque recette.
J’aimerais sur ma page d’acceuil affiché le nom des 5
users les plus influents, comment indiquer a ruby de
compter le nombre de recette qu’a poster les users et
de les classer du plus petit au plus grand?

Tu peux créer une colonne dans la table ‘users’
recettes_count qui stockera le nombre de recettes
créés par un utilisateur :

t.column :recettes_count, :integer, :default => 0

Rails se chargera automatiquement de mettre à jour
ce compteur quand tu ajoutes une recette d’un utilisateur.

Tu peux alors classer tes utilisateurs selon la colonne
‘recettes_count’ par valeur décroissante.

– Jean-François.


membre du CA de Ruby France.
Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)

J’ai exactement fait cela, mais j’obtient l’erreur suivante :
uninitialized constant Recette::Users

de plus la recette est quand meme sauvegardé dans la database mais
recettes_count de ma table users reste toujours a zéro…
Que faire?

Jean-François Trân wrote:

ma pomme :

Tu peux cr�er une colonne dans la table ‘users’
recettes_count qui stockera le nombre de recettes
cr��s par un utilisateur :

t.column :recettes_count, :integer, :default => 0

oops un oubli :

Rails se chargera automatiquement de mettre � jour
ce compteur quand tu ajoutes une recette d’un utilisateur.

si tu sp�cifies :

class Recette < AR::B
belongs_to :user, :counter_cache => true
end

– Jean-Fran�ois.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)

ma pomme :

Tu peux créer une colonne dans la table ‘users’
recettes_count qui stockera le nombre de recettes
créés par un utilisateur :

t.column :recettes_count, :integer, :default => 0

oops un oubli :

Rails se chargera automatiquement de mettre à jour
ce compteur quand tu ajoutes une recette d’un utilisateur.

si tu spécifies :

class Recette < AR::B
belongs_to :user, :counter_cache => true
end

– Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)