Выполнение метода для всех записей всего класса Ruby (с использованием инфраструктуры Rails) - PullRequest
0 голосов
/ 11 мая 2011

Я пытаюсь написать метод, который выбирает подмножество всех членов класса User. Вот моя попытка:

 def self.stats_users(date)                                                
   self.where("employee = false AND last_sign_in_at >= ?", date)          
 end   

Я пытался вызвать эту функцию следующим образом: User.stats_user('2011-04-14')

Однако этот метод выполняет этот оператор sql:

SELECT "users".* FROM "users" WHERE (employee = false AND last_sign_in_at >= '2011-04-14')

когда он должен просто выполнить:

SELECT * FROM "users" WHERE (employee = false AND last_sign_in_at >= '2011-04-14')

Я предполагаю, что мой реальный вопрос вращается вокруг написания методов, которые воздействуют на всех членов класса, и моего относительного незнания, где размещать эти методы и как их вызывать. Мне также кажется, что у меня возникли небольшие проблемы с пониманием того, как ActiveRecord преобразует операторы в raw sql.

1 Ответ

2 голосов
/ 11 мая 2011

RE SQL

В этом случае запросы эквивалентны.

RE-методы для коллекций

Это то, для чего области действия предназначены для:

scope :stats_users, lambda { |date| 
  where("employee = false AND last_sign_in_at >= ?",date)
}          
...