J'ai une application de rails utilisant le plugin acts_as_rateable
.Comment trouver des modèles non notés avec acts_as_rateable
Je suis bloqué sur la façon de récupérer des modèles non notés en utilisant ce plugin - mais il s'agit plus d'une question générale sur les rails/SQL que spécifique à ce plugin.
Agit comme ajoute ce qui suit rateable au schéma:
create_table "ratings", :force => true do |t|
t.integer "rating", :default => 0
t.string "rateable_type", :limit => 15, :default => "", :null => false
t.integer "rateable_id", :default => 0, :null => false
t.integer "user_id", :default => 0, :null => false
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "ratings", ["user_id"], :name => "fk_ratings_user"
Et mes modèles ont aussi noté une colonne d'identification de l'utilisateur. J'aimerais pouvoir récupérer toutes les instances d'un modèle particulier qui n'ont pas été évaluées du tout, ainsi que toutes les instances qui n'ont pas été évaluées par quelqu'un d'autre que le créateur du modèle, par ex. voici un modèle:
class Review < ActiveRecord::Base
acts_as_rateable
belongs_to :user
...
end
Je veux quelque chose comme le pseudo-code suivant
Review.find(:all, :conditions=>"not rated by anyone")
Review.find(:all, :conditions=>"not rated by anyone except review.user")
Cependant, je ne peux pas comprendre le SQL pour le faire, ni la magie des rails pour générer ce SQL: - Mise à jour: cette requête semble trouver tous les modèles évalués par quelqu'un d'autre que l'utilisateur propriétaire du modèle. Donc je pense que j'ai juste besoin d'inverser ça d'une manière ou d'une autre.
Review.find(:all,
:joins=>'left join ratings on reviews.id=ratings.rateable_id && ratings.rateable_type="Review"',
:conditions=>'reviews.user_id <> ratings.user_id',
:group=>'reviews.id')
Do modèles non notés ont une cote de zéro? –
Oui, ils le font, du moins lorsqu'ils utilisent l'interface rails - c'est-à-dire Review.find (1).rating == 0 s'il n'y a pas de classement pour ce modèle – frankodwyer