Не смотря на то, что в очень популярной статье Ruby on Rails Security Guide пишеться о том, что simple_captcha не самый лучший вариант для защиты от спама именно о нем и пойдет речь далее. Установка Как и для всех других плагинов для установки в консоле пишем следуйщие:
svn://rubyforge.org/var/svn/expressica/plugins/simple_captcha
Для корректной работы плагина потребуется Rmagick. Установка Rmagick выходит за рамки этого поста, но я думаю что в скором времени высветлю этот вопрос. Использование Если вам не нужна поддержка валидации на уровне модели, тогда достаточно вызвать хелпер плагина в вашем rhtml:
<%= show_simple_captcha %>
а в контроллере
if simple_captcha_valid?
переход дальше
else
перегрузить текущую страничку с ошибкой
end
В проэкте над которым я работаю это выглядело следуйщим образом:
def share
@post = Post.find(:first,:conditions => ["can_publish=1 and is_edited=1 and id=?", params[:slug].to_i])
if simple_captcha_valid?
if params[:email] =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
email = PostMailer.create_share(@post, params[:email])
blind_email = PostMailer.create_blind(@post, params[:from_email], params[:email],
params[:emailmessage])
PostMailer.deliver(email)
PostMailer.deliver(blind_email)
PostShare.create(
:post => @post,
:email => params[:email],
:from_email => params[:from_email],
:message => params[:emailmessage])
flash[:notice] = "You have sent a link for this article to #{params[:email]}."
end
render :template => 'posts/show'
else
flash[:notice] = "You have entered wrong combination from the picture. Please try again."
redirect_to post_url(@post.permalink)
end
end
Если вас не устраивает как хелпер разставляет теги вы можете заменить разметку на свою в файле ../vendor/plugins/simple_catcha/simple_captcha_action_view в методе show_simple_captcha. Использование с валидацией модели Допустим у вас есть модель Responce, которая отвечает за добавление откликов о товаре на сайте. Тогда в моделе добавлем:
class Response < ActiveRecord::Base apply_simple_captcha
В вьюшку добавляем хелпер и сабмит-кнопку для отправки запроса в контроллер
"response"
В контроллере же вызываем метод-хелпер который проверяет поддтверждена ли картинка и сохраняет новую запись в базу:
def add_response @response = Response.new(params[:response])@response.save_with_captcha end