рубин 1.9.2 P290 и Rails 3.0.9Название модуля RubyError - порядок?
У меня есть файл .RB структурированную так:
module M1
# .... some method defs ...
# Code in the middle, outside of any def:
if Rails.version >= '3'
class Railtie < ::Rails::Railtie
ActiveSupport.on_load :action_controller do
ActionController::Base.send :include, ::M1::M2 # <- throws an error..
end
end
end
module M2
# ... method defs ...
end
end
ActionController::Base.send :include, ::M1::M2
Линия бросает NameError - он не может найти M2.
Однако, , когда я перемещаю M2 в начало M1, он без проблем справляется с этой ссылкой. Это как раз работает Ruby - интерпретатор не делает первый проход, чтобы получить все допустимые имена в области видимости? Можете ли вы объяснить это поведение?
Появляются ли эти ошибки после определения собственного контроллера, который наследуется от ActionController :: Base? – WarHog
Этот код из камня open_id_authentication (https: // github.com/Velir/open_id_authentication), хотя я изменил имена модулей, чтобы упростить их чтение. Ошибка возникает, когда я пытаюсь запустить сервер (rails s) –
Как я могу видеть из источника, code're определяет блок 'on_load' как' ActionController :: Base.send: include, ControllerMethods', а не 'ActionController :: Base. send: include, :: OpenIdAuthentication :: ControllerMethods'. Pls исправить меня, если я ошибаюсь – WarHog