Я пытаюсь использовать приведенный ниже код, чтобы продлить активную запись, чтобы мой класс заказа стал немного чище. Однако он не работает.ActiveRecord :: Base Extension не работает
class ActiveRecord::Base
def self.has_statuses(*status_names)
validates :status,
:presence => true,
:inclusion => { :in => status_names}
status_names.each do |status_name|
scope "all_#{status_name}", where(:status => status_name)
end
status_names.each do |status_name|
define_method "#{status_name}?" do
status == status_name
end
end
end
end
В environment.rb я требую вышеупомянутого расширения с
require "#{Rails.root}/lib/active_record_extensions.rb"
Если я с другой стороны, создаю абстрактный базовый класс OrderBase и давайте мой класс заказа наследует от вместо этого он работает, как ожидался , Что мне нужно сделать, чтобы мой патч обезьяны «взял»?
EDIT: забыл упомянуть, что получил сообщение о том, что метод отсутствует для has_statuses.
EDIT2: Приведенный выше код работает в консоли (рельсы с), но он не работает в тесте
EDIT3: Я изменил окружающую среду/test.rb к config.cache_classes = ложным и что, кажется, Покажи фокус. Очевидно, им есть чему поучиться :)
Это на самом деле работает для меня, как вы используете этот метод? – seeingidog
Я пытаюсь использовать его в моем классе Order, например: has_statuses: created,: in_progress,: отправлено и т. Д., Чтобы сохранить класс в чистоте. – mhenrixon
@seeingidog err теперь работает и для меня, и я понятия не имею, что другое ... Я, очевидно, что-то сделал, но не знаю, что. Отправьте ответ, говоря, что он должен работать, и я отмечу это как ответ! – mhenrixon