Rails 3-将方法添加到environment.rb中的Array类会导致对象错误



我最近在environment.rb文件中添加以下内容时遇到了一个错误:

class Array
  def sum
    self.inject{|sum,x| sum + x }
  end
end

允许我执行array.sum的预期方法非常有效,但当我试图通过给定的对象has_many关系访问对象时,它导致了一个奇怪的错误,例如:

class Device < ActiveRecord::Base
  attr_accessible :name, :device_abilities, :abilities
  has_many :device_abilities, :dependent => :destroy
  has_many :abilities, :through => :device_abilities, :dependent => :destroy
end
class Ability < ActiveRecord::Base
  attr_accessible :name, :device_abilities, :devices
  has_many :device_abilities, :dependent => :destroy
  has_many :devices, :through => :device_abilities, :dependent => :destroy
end
class DeviceAbility < ActiveRecord::Base
  attr_accessible :device_id, :ability_id
  belongs_to :device
  belongs_to :ability
end

在environment.rb中没有sum方法的情况下,这很好,所以我可以像往常一样执行@device.abilities,但当在environment.rb中添加sum方法时,我在尝试执行@device.abilities时会出现以下错误:

undefined method `zero?' for nil:NilClass

有人能提出为什么会发生这种情况,以及我如何解决它吗?我知道我可以手动求和每个数组,但这似乎不是很像rails风格。

谢谢!

sum已经被rails定义为Enumerable#sum,所以您根本不应该定义它。

此外,我认为environment.rb不是放置这种东西的合适位置。如果要扩展基类,则应该创建一个新的初始值设定项文件。您的新方法可能会干扰rails版本。

相关内容

最新更新