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
rails генерируют simple_captcha и rake db: migrate без ошибок.
Капча отображается, но не проявляется: не имеет значения, правильно ли введена капча или нет, это все еще редирект на tests_path и текст не сохраняется.
Без капчи текст хранится правильно, работает:
def create
@test = Test.new(test_params)
@test.save
redirect_to root_path
end
end
1 ответ
Решение
Как оказалось, gem не поддерживает rails 4. Работа gem для 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