【问题标题】:Why does this object respond_to :each but object.method(:each) raises an error为什么这个对象 respond_to :each 但是 object.method(:each) 会引发错误
【发布时间】:2012-12-04 03:21:46
【问题描述】:

我继承了一个项目,其中 ActiveRecord 模型给了我奇怪的行为。到目前为止,这是唯一一个这样做的模型。

car = Car.first
car.respond_to?(:each) # true

我找不到在Car 中定义的each 方法。

我在another post看到你可以找出谁注入了这个方法,所以我试了一下:

car.method(:each) # raises "undefined method `each' for class `Car'

我想将Cardraper 一起使用,但因为我的实例表现得像一个Enumerable,所以draper 会这样对待它。然而,Draper 不是问题。

我应该怎么做才能弄清楚?

【问题讨论】:

  • 发布您的Car 型号代码。
  • 不幸的是,我不能在不编辑大部分内容的情况下发布(这可能会违背目的),因为我不允许这样做。我们还有其他方法可以找到吗?无论如何,这是一个相当大的模型,有 1,286 行。
  • 好吧,respond_to? 可以被覆盖,并且通常是为了让类在面对method_missing 时表现一致,但这只是一种可能的机制,而不是解释。没有代码,我们无能为力。
  • 如果文件太大,对它进行二分查找。几乎全部删除。那解决了吗?撤消,将删除的部分分成两半,删除其中之一。如果这有帮助,撤消并删除另一个。否则,保留一半删除。将剩下的分成两半,依此类推。
  • 如果您已经解决了问题,您应该在下面发布您的答案,您可以在 48 小时后接受,或者,如果您认为您的问题/答案与未来的访问者无关,您可以完全删除您的问题。请不要只在评论中留下您的答案。

标签: ruby-on-rails ruby


【解决方案1】:

我的问题的 cmets 帮助我找到了它!我使用 Dmitry 的二进制搜索来找出导致它的原因,并在模型使用的 gem 中发现了问题。宝石 Mark Reed 覆盖 respond_to。所以教训是:如果responds_to 很时髦,也许它在某个地方被覆盖了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2018-08-05
    相关资源
    最近更新 更多