Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Ruby
Ruby Le forum sur la programmation Ruby. Voir aussi la FAQ Ruby et les cours Ruby.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/11/2011, 15h48   #1
Membre à l'essai
 
Inscription : décembre 2007
Messages : 57
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : décembre 2007
Messages : 57
Points : 23
Points : 23
Par défaut Rails 3.1 et Mongoid comment gérer la persistence dans une relation many-to-many

Bonjour,

Je tente de gérer le modèle de donnée suivant : un utilisateur pour créer des évènements, et voter pour les évènements des autres utilisateurs. Si un utilisateur vote :up, l'auteur de l'évènement gagne 5 points de notoriété, si il vote :down, l'auteur perd 5 points.

Voici mes classes :

User.rb
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
class User
   include Mongoid::Document
   include Mongoid::Timestamps
 
   field :notoriety, :type => Integer
 
   attr_accessible :notoriety
 
   has_many :events, :dependent => :destroy
   has_many :votes
 
   def vote_on_event(event, value)
     vote = event.votes.create!({:value => value})
     self.votes << vote
     event.user.update_notoriety(value)
     save!
     return vote
   end
 
   def update_notoriety(vote_value)
     self.notoriety += (vote_value == :up)? 5 : -5
     save! 
   end
 
end
Event.rb
Code :
1
2
3
4
5
6
7
8
 
class Event
  include Mongoid::Document
  include Mongoid::Timestamps
 
  belongs_to :user
  has_many :votes, :dependent => :destroy
end
Vote.rb
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
class Vote
  include Mongoid::Document
  include Mongoid::Timestamps
 
  field :value, :type => Symbol #can be :up or :down or :none
 
  validates :value, :type_vote => true
 
  attr_accessible :value
 
  belongs_to :user
  belongs_to :event
 
  scope :recents, order_by(:created_at => :desc)
 
end
Si j'écris le test suivant :

Code :
1
2
3
4
5
6
7
8
it "should update the notoriety of the user" do
  event = Factory(:event, :user => @user)
  @user.notoriety.should == 0
  user2 = Factory(:user)
 
  vote = user2.vote_on_event(event, :up)
  event.user.notoriety.should == 5
end
Il échoue parce que event.user.notoriety est égal à 0. Donc il semblerait que ma méthode update_notoriety ne fonctionne pas. Je pense que je n'ai pas implémenté les choses correctement dans mon modèle.

Est-ce que quelqu'un peut aider ? Merci d'avance.
BerBiX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 16h24   #2
Membre à l'essai
 
Inscription : décembre 2007
Messages : 57
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : décembre 2007
Messages : 57
Points : 23
Points : 23
Ok, plutôt que de réinventer la roue, je vais partir sur cette solution là : voting extension.
BerBiX est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h59.


 
 
 
 
Partenaires

Hébergement Web