0 votes

named_scope crée de nouveaux objets si je l'utilise avec un :join

Avertissement : j'ai découvert Ruby on Rails il y a des années, et beaucoup de choses sont nouvelles pour moi maintenant que je m'y intéresse à nouveau. L'une de ces choses, ce sont les scopes nommés. Ils semblent géniaux, mais je n'obtiens pas le résultat escompté. Voici une for-instance :

class User
  has_many logs
  named_scope :logged_in, :joins => ['logs'], :conditions => ['logs.logout_at IS NULL']
end

Class Log
  belongs_to user
end

J'ai cru comprendre que la réalisation d'un

User.logged_in

devrait être exactement la même que celle d'un

User.find(:all, :joins => ['logs], :conditions => ['logs.logout_at IS NULL'])

Mais au lieu de cela, je reçois des objets différents. En voici la démonstration :

real = User.find_by_name('admin')
  #<User id:12345, name: 'admin' ... >
fake = User.logged_in.find_by_name('admin')
  #<User id: 54321, name: 'admin' ... >

Ma question est donc la suivante : d'où vient ce nouvel objet et comment puis-je faire en sorte que named_scope me donne l'objet original ?

3voto

Chap Points 1645
named_scope :logged_in, 
            :conditions => ["logs.logout_at IS NULL"], 
            :include => :logs

0voto

wmoxam Points 41

Il semble que vous ayez plusieurs utilisateurs nommés "admin

Essayez ceci :

User.find_all_by_name('admin')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X