1

我正在尝试在我的应用程序中实现逻辑验证码。我已经搭建了简单的 TextCaptcha 来在 DB 中存储问题和答案。

目前我在 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”中做到这一点,我一开始就试图这样做,但可以弄清楚。

4

2 回答 2

1

由于ApplicationController在 Rails 应用程序中扩展自ActionController::Base,您可以这样做:

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

app/controllers/application_controller.rb

于 2011-02-20T01:12:18.917 回答
0

如果当 Rails 重新加载您的模型时 TextCaptcha 被吹走,修复是使用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/

于 2011-02-17T05:12:48.200 回答