#ruby-on-rails-3
#ruby-on-rails-3
Вопрос:
Что я уже пробовал делать: я пытался прочитать документацию на github и заставить ее работать на Rubymine, и мне удалось запутаться в том, что нужно для контроллеров, и что нужно в папке конфигурации. Я попробовал Google и нашел несколько довольно хороших руководств, но в них отсутствуют шаги, которые я не обязательно знаю, чтобы перейти тоже.
Что я пытаюсь выяснить: я хочу иметь возможность использовать recaptcha при регистрации для входа в систему, используя драгоценный камень devise, я уже сгенерировал страницы для моего входа в систему devise.
Что у меня есть на данный момент:
Я установил и подключил: devise 1.2.rc и recaptcha 0.3.1. Я запускаю Rubymine в Windows xp. Ruby SDK 1.8.7-p302, с Rails 3.0.3
Я был в Google, и у меня есть мои открытый и закрытый ключи. Следующий шаг говорит мне, что я должен добавить свои ключи в project / config / initializers / recaptcha.rb Это то, что содержится в этом файле:
Recaptcha.configure do |config|
config.public_key = 'myKey'
config.private_key = 'myKey'
end
Теперь я должен исправить свой gemfile с помощью:
gem 'recaptcha', :require => 'recaptcha/rails'
У меня также есть мой config / application.rb для чтения:
require 'rails/all'
require 'net/http'
Я также добавил в свои внешние библиотеки / [gem] devise / app / views /devise /registrations /new.html.erb тег recaptcha:
<%= recaptcha_tags %>
<p><%= f.submit "Sign up" %></p>
Где я сталкиваюсь с проблемами (я думаю), это
app /controllers/registrations_controller.rb и config/routes.rb
Я немного в недоумении, что именно содержится в этих файлах. Я был бы признателен за любую помощь или за написанный кем-то учебник, который проведет меня через это шаг за шагом, был бы очень полезен. Спасибо
Вот что я сделал после сообщения Феликса:
внешние библиотеки / приложение / контроллеры / разработка /registrations_controller.rb
класс Devise::RegistrationsController < Devise::RegistrationsController для создания
if verify_recaptcha then
super
else
build_resource
clean_up_passwords(resource)
flash[:notice] = 'Invalid Captcha'
render_with_scope :new
end
build_resource
if resource.save
if resource.active?
set_flash_message :notice, :signed_up
sign_in_and_redirect(resource_name, resource)
else
set_flash_message :notice, :inactive_signed_up, :reason => resource.inactive_message.to_s
expire_session_data_after_sign_in!
redirect_to after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords(resource)
render_with_scope :new
end
end
Из Project / config /routes.rb:
devise_for :users, :controllers => {:registrations => 'registrations'}
Это ошибка, которую он выдает:
ActionController::RoutingError (неинициализированный постоянный RegistrationsController):
Визуализировано C:/Ruby/lib/ruby/gems/1.8/gems/actionpack-3.0.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb в пределах восстановления / компоновки (0.0 мс) ….. есть идеи?
Ответ №1:
Для ваших маршрутов вы можете сохранить свои обычные маршруты devise, за исключением указания вашего пользовательского контроллера:
devise_for :users, :controllers => {:registrations => 'registrations'}
В registrations_controller.rb вы хотите создать подкласс Devise RegistrationsController и переопределить метод ‘create’:
class RegistrationsController < Devise::RegistrationsController
def create
if verify_recaptcha then
super
else
build_resource
clean_up_passwords(resource)
flash[:notice] = 'Invalid Captcha'
render_with_scope :new
end
end
end
Комментарии:
1. итак, в моем registrations_controller.rb у меня есть мой текущий def create… Я должен полностью заменить или добавить к?
2. Что ж, ваш текущий контроллер регистраций должен относиться к подклассу Devise registrations controller и быть пустым в противном случае, если вы не выполнили другие настройки. Если у вас уже определен метод create, вы просто хотите остановить процесс регистрации, если
verify_recaptcha
возвращает false.