Rails 3 - расширяем ActionController - PullRequest
1 голос
/ 17 февраля 2011

Я пытаюсь реализовать логическую капчу в моем приложении. Я создал простой TextCaptcha для хранения вопросов и ответов в БД.

В настоящее время у меня есть это в initializers / text_captcha.rb

require 'text_captcha'
ActionController::Base.send(:include, TextCaptcha)

Это в "lib / text_captcha.rb":

module TextCaptcha
    def self.included(base)
      base.send(:include, InstanceMethods)
    end
    module InstanceMethods
      def require_text_captcha
        @captcha = "hello!"
      end
    end
end

Таким образом, в контроллере комментариев у меня есть это, чтобы иметь доступ к @captcha в представлении

before_filter :require_text_captcha

Плохо то, что мне приходится перезапускать webrick каждый раз, когда я делаю изменения - так что я думаю, что делаю это неправильно? Я мог бы избавиться от инициализатора и просто потребовать "text_captcha" там, где мне нужно ... Или есть способ сделать это в "models / text_capctha.rb", который я пытался сделать в начале, но смог выяснить.

Ответы [ 2 ]

1 голос
/ 20 февраля 2011

Поскольку ApplicationController в приложении Rails начинается с ActionController::Base, вы можете сделать:

require 'text_captcha'
class ApplicationController < ActionController::Base
  include TextCaptcha
end

в app/controllers/application_controller.rb?

0 голосов
/ 17 февраля 2011

Если TextCaptcha сдувается, когда Rails перезагружает ваши модели, исправление должно использовать to_prepare вместо инициализатора для загрузки. Для получения дополнительной информации см. Следующие ресурсы:

Официальные документы: http://api.rubyonrails.org/classes/ActionDispatch/Callbacks.html#method-c-to_prepare Короткое сообщение в блоге: http://www.cowboycoded.com/2011/01/28/reloading-rails-3-engine-initializers-in-development/

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