ale*_*enm 2 ruby activerecord enumeration ruby-on-rails-3
我有一个模型可以从特定城市获取所有游戏.当我得到那些游戏时,我想过滤它们,我想使用这个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.
Run Code Online (Sandbox Code Playgroud)
为什么reject在我的模型中失败但在我看来不是?
区别在于您要呼叫的对象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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6131 次 |
| 最近记录: |