2011-02-17 1 views
1

내 애플 리케이션에서 로직 captcha를 구현하려고합니다. DB에 질의 응답을 저장하기 위해 간단한 TextCaptcha를 스캐 폴딩했습니다.레일 3 - 확장 ActionController

현재 내가 초기화/text_captcha.rb이있다 "lib 디렉토리/text_captcha.rb"에서

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

이 : 댓글 컨트롤러 그래서

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을 다시 시작해야한다는 것입니다. 내가 잘못하고있는거야? initializer를 없애고 필요할 때 "text_captcha"를 요구할 수 있습니다. 또는 처음에 시도하려고 시도했지만 알아낼 수있는 "models/text_capctha.rb"에서이 작업을 수행 할 수있는 방법이 있습니다.

답변

1

ApplicationController 이후를 레일 응용 프로그램에서 당신이 할 수있는, ActionController::Base에서 확장?

+0

당신이 지금 게시 하시길 바랍니다. –

+0

내 접근법의 또 다른 문제점은 TextCaptcha.find (: all)와 같은 것을 할 수 없다는 것입니다. 올바르게 기억하면 메서드 오류가 없습니다. –

0

레일즈가 모델을 다시로드 할 때 TextCaptcha가 날아가 버리면 이니셜 라이저 대신로드 to_prepare을 사용하는 것이 수정되었습니다. 자세한 내용은 다음 리소스를 참조하십시오

공식 문서 : http://api.rubyonrails.org/classes/ActionDispatch/Callbacks.html#method-c-to_prepare 짧은 블로그 포스트 :

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

app/controllers/application_controller.rb을에 : http://www.cowboycoded.com/2011/01/28/reloading-rails-3-engine-initializers-in-development/