Rails 3 - 扩展ActionController

时间:2011-02-17 05:01:38

标签: ruby-on-rails-3 extend actioncontroller

我正在尝试在我的应用中实现逻辑验证码。我有一个简单的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”中执行此操作,我在开始时尝试做但可以弄明白。

2 个答案:

答案 0 :(得分:1)

由于Rails应用中的ApplicationController来自ActionController::Base,您可以这样做:

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

app/controllers/application_controller.rb

答案 1 :(得分: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/