Rails 3 - Добавление метода к классу Array в environment.rb вызывает ошибку с объектами - PullRequest
0 голосов
/ 18 января 2012

Недавно я столкнулся с ошибкой, когда добавил в свой файл 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

Это прекрасно работает без использования метода sum в environment.rb, поэтому я могу сделать @device.abilitiesкак обычно, но когда метод sum добавлен в environment.rb, я получаю следующую ошибку при попытке сделать @device.abilities:

undefined method `zero?' for nil:NilClass

Может кто-нибудь подсказать, почему это происходит, и как я могу работатьвокруг него?Я знаю, что могу суммировать каждый массив вручную, но это не похоже на рельсы.

Спасибо!

1 Ответ

1 голос
/ 18 января 2012

сумма уже определена рельсами как Enumerable # sum , поэтому вам вообще не нужно его определять.

Кроме того, я не думаю, что environment.rb - подходящее место для подобных вещей. Вы должны создать новый файл инициализатора, если вы хотите расширить базовые классы. Ваш новый метод, вероятно, мешает версии этого рельса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...