Je viens d'être référé à stackoverflow par un ami ici pour aider avec un problème que j'ai. Je suis assez novice en ruby on rails et je travaille sur un projet collaboratif où nous avons un script (medal_worker.rb) qui doit se dérouler à intervalles réguliers pour récompenser les différentes médailles en fonction de la participation et du succès sur notre site web. Une des nouvelles médailles sur lesquelles je travaille récompense les gens pour des «jalons». Pour ce problème, disons que nous voulons leur donner des médailles lorsqu'ils font des commentaires de 100, 1000 et 10000. Je voudrais le faire en utilisant named_scopes du modèle User (user.rb) pour me donner des listes filtrées des utilisateurs que je recherche.Ruby on Rails: using named_scopes
Ma question est: Comment puis-je trouver les utilisateurs qui n'ont pas les médailles respectives pour le niveau de commentaire de milestone respectif (de préférence en utilisant les named_scopes du modèle User)?
Voici un Exerpt de mon fichier model_worker.rb:
def award_comment_milestone(comments)
users = Users.frequent_comment_club_members(comments).not_awarded_medal(Medal.find_by_id(medal.id))
for user in users do
award_medal(medal, nil, user) if @award
end
end
Voici où je suis à des named_scopes dans le modèle utilisateur (user.rb):
named_scope :frequent_comment_club_members, lambda { |*args|
{:include => comment_records, :conditions => ['comment_records.comment_type = ? and comment_records.comments >= ?', 'User', (args.first || 0)]}
}
named_scope :not_awarded_medal, lambda { |medal|
{:include => :awards, :conditions => ['awards.medal_id not in (select awards.medal_id from awards where awards.medal_id = ?)", medal.id] }
}
Cela ne fonctionne pas comme je le voudrais, mais je ne sais pas si le problème est dans le named_scopes ou comment je passe des arguments ou quoi. Merci.
Qu'est-ce qui ne fonctionne pas exactement? – jonnii