named_scope создает новые объекты, если я использую его с: join - PullRequest
0 голосов
/ 01 июня 2009

Отказ от ответственности: мое первоначальное знакомство с Ruby on Rails было буквально много лет назад, и теперь для меня очень много нового, так как я собираю его обратно. Одна из этих вещей называется областями действия. Они кажутся великолепными, но я не получаю ожидаемого результата. Вот, к примеру,

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

Class Log
  belongs_to user
end

Насколько я понимаю, что делает

User.logged_in

должно быть точно так же, как и

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

Но вместо этого я возвращаю разные предметы. Для демонстрации:

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

Итак, мой вопрос: откуда на земле появляется этот новый объект и как мне получить named_scope, чтобы дать мне исходный объект?

Ответы [ 2 ]

3 голосов
/ 01 июня 2009
named_scope :logged_in, 
            :conditions => ["logs.logout_at IS NULL"], 
            :include => :logs
0 голосов
/ 01 июня 2009

Похоже, у вас есть несколько пользователей с именем 'admin'

Попробуйте это:

User.find_all_by_name('admin')
...