ActiveRecord и использование метода отклонения - PullRequest
2 голосов
/ 06 марта 2011

У меня есть модель, которая выбирает все игры из определенного города. Когда я получаю эти игры, я хочу отфильтровать их и использовать метод reject, но я сталкиваюсь с ошибкой, которую пытаюсь понять.

# STEP 1 - Model
class Matches < ActiveRecord::Base
  def self.total_losses(cities)
    reject{ |a| cities.include?(a.winner) }.count
  end
end

# STEP 2 - Controller
@games = Matches.find_matches_by("Toronto")
# GOOD! - Returns ActiveRecord::Relation

# STEP 3 - View
cities = ["Toronto", "NYC"]
@games.total_losses(cities)
# FAIL - undefined method reject for #<Class:0x00000101ee6360>

# STEP 3 - View
cities = ["Toronto", "NYC"]
@games.reject{ |a| cities.include?(a.winner) }.count
# PASSES - it returns a number.

Почему reject терпит неудачу в моей модели, но не в моем представлении?

1 Ответ

6 голосов
/ 06 марта 2011

Разница заключается в объекте, на который вы звоните reject.В представлении @games - это массив объектов Active Record, поэтому при вызове @games.reject используется Array#reject.В вашей модели вы вызываете reject на self в методе класса, то есть он пытается вызвать Matches.reject, который не существует.Сначала вам нужно получить записи, например:

def self.total_losses(cities)
  all.reject { |a| cities.include(a.winner) }.count
end
...