Я недавно приключиться ошибку, когда я добавил следующее к моему environment.rb файла:Rails 3 - Добавление метода к классу 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
Это прекрасно работает без метода суммы в среде .rb, поэтому я могу сделать @device.abilities
как n НПУ, но когда метод сумма добавляется в environment.rb, я получаю следующее сообщение об ошибке при попытке сделать @device.abilities
:
undefined method `zero?' for nil:NilClass
Может кто-нибудь предложить, почему это происходит, и как я могу работать вокруг него? Я знаю, что я могу суммировать каждый массив вручную, но это не кажется очень рельсовым.
Спасибо!
Чтобы суммировать поле экземпляра модели AR, Rails предоставляет http://ar.rubyonrails.org/classes/ActiveRecord/Calculations/ClassMethods.html#M000296, чтобы вы могли вместо того, чтобы добавлять сумму в массив? – microspino
Также обратите внимание, что «массивы», возвращаемые из отношений AR, не являются массивами, хотя они утверждают, что они есть. –