2014-02-12 5 views
0

Я чувствую, что пропустил некоторые мелкие детали, но я могу это понять.Rails 4 simple_captcha не работает

Я пытаюсь подключиться simple_captcha (https://github.com/galetahub/simple-captcha) для своего проекта на Rails 4:

Gemfile:

gem 'simple_captcha', :git => 'git://github.com/galetahub/simple-captcha.git' 

application_controller.rb:

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 
    include SimpleCaptcha::ControllerHelpers 
end 

.html.erb:

<%= form_for :test, url: tests_path do |f| %> 
... 
    <p> 
    <%= f.simple_captcha :label => "Enter numbers..", :object => "test" %> 
     <%= f.submit %> 
    </p> 
<% end %> 

tests_controller.rb:

class TestsController < ApplicationController 
... 
def create 
    @test = Test.new(test_params) 
    if @test.valid_with_captcha? 
    @test.save_with_captcha 
    redirect_to root_path 
    else 
    redirect_to tests_path 
    end 
    end 
end 

рельсы генерировать simple_captcha и грабли БД: мигрировать без ошибок.

Captcha отображается, но не проявляет себя: он не имеет значения, правильно введен в капчу или нет, по-прежнему перенаправляется на tests_path, и текст не сохраняется.

без капчи текста хранится должным образом, он работает:

def create 
    @test = Test.new(test_params) 
    @test.save 
    redirect_to root_path 
end 
end 

ответ

2

Как оказалось камень не поддерживает рельсы 4. Работа камень для Rails 4: https://github.com/pludoni/simple-captcha

И я сильно ошибся в коде должно быть примерно следующее:

def create 
    @test = Test.new(captcha_params) 

    if @test.save_with_captcha 
     redirect_to root_path 
    else 
     if @test.errors.any? 
     redirect_to tests_path 
     end 
    end 
    end 

    private 
    def captcha_params 
    params.require(:test).permit(:id, :text, :captcha, :captcha_key) 
    end 
Смежные вопросы