【发布时间】:2013-08-25 10:07:26
【问题描述】:
鉴于此定义(在 Ruby 2.0.0-p195 上使用 Rails 3.2.13)...
class Food < ActiveRecord::Base
has_many :recipe_foods, foreign_key: :food_id
.reset 没有按照文档记录(它应该重置 @loaded 标志,而是重新查询数据库并返回结果)...
2.0.0-p195 :037 > f = Food.last
Food Load (1.6ms) ...
=> #<Food ...
2.0.0-p195 :038 > f.recipe_foods
RecipeFood Load (9.4ms) ...
=> [#<RecipeFood ...
2.0.0-p195 :039 > f.recipe_foods.reset
RecipeFood Load (10.0ms) ...
=> [#<RecipeFood ...
我怀疑其他一些 gem 劫持了该方法,但这是我从 .method 得到的...
2.0.0-p195 :040 > f.recipe_foods.method(:reset).source_location
NameError: undefined method `reset' for class `Array'
我如何确定实际执行的是哪个版本的 .reset?
更新:
当我尝试调用一个不存在的方法时,我会陷入混乱(以防这有助于解开谜团):
2.0.0-p195 :052 > f.recipe_foods.snafu
NoMethodError: undefined method `snafu' for #<ActiveRecord::Relation:0x007fdaef6315b0>
2.0.0-p195 :053 > f.recipe_foods.method(:snafu)
NameError: undefined method `snafu' for class `Array'
【问题讨论】:
标签: ruby-on-rails ruby activerecord associations monkeypatching