Rails 3 - плагин возвращает «неопределенную локальную переменную» - PullRequest
0 голосов
/ 29 ноября 2010

У меня есть собственный плагин (я его не писал), который не работает на rails 3, однако он работал с rails 2. Это для пользовательской схемы аутентификации, вот как выглядит основной модуль:

#lib/auth.rb
module ActionController

  module Verification
    module ClassMethods
      def verify_identity(options = {})
        class_eval(%(before_filter :validate_identity, :only => options[:only], :except => options[:except]))
      end
    end
  end

  class Base
    #some configuration variables in here

    def validate_identity
      #does stuff to validate the identity
    end
  end

end

#init.rb
require 'auth'
require 'auth_helper'
ActionView::Base.send(:include, AuthHelper)

AuthHelper содержит простой вспомогательный метод для аутентификации, основанный на членстве в группе.

Когда я включаю «verify_identity» в actioncontroller:

class TestController < ApplicationController
  verify_identity
  ....
end

Я получаю ошибку маршрутизации: неопределенная локальная переменная или метод verify_identity для TestController: Class. Есть идеи, как я могу это исправить? Спасибо!

1 Ответ

3 голосов
/ 29 ноября 2010

Он работал в 2.3, потому что там был модуль ActionController::Verification.Он не работает в 3.0, потому что этот модуль не существует.Вместо того, чтобы полагаться на Rails, чтобы иметь модуль, к которому вы можете подключиться, определите свой собственный, например:

require 'active_support/concern'
module Your
  module Mod
    extend ActiveSupport::Concern
    module ClassMethods
      def verify_identity(options = {})
        # code goes here
      end
    end
  end
end

и используйте:

ActionController :: Base.send (: include, Your:: Mod)

Чтобы сделать его функции доступными.ActiveSupport::Concern поддерживает наличие в вашем модуле модуля ClassMethods и InstanceMethods, и он заботится о загрузке методов в этих модулях в правильные области независимо от того, в какой модуль он включен.

...