2017-02-02 2 views
7

Когда пользователь имеет неудачную попытку регистрации, мое приложение перенаправляет их на корневой URL-адрес, а не на страницу регистрации.Rails & Devise: неудачная попытка регистрации перенаправляет на корневой URL-адрес

Маршруты:

resources :users 
    devise_for :users, path: '', path_names: { sign_up: 'register', sign_in: 'login', sign_out: 'logout'}, :controllers => { :omniauth_callbacks => "callbacks" } 

регистраций # новый:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), :html => {:class => "col s12 form-text", autocomplete: "off"}) do |f| %> 

    <%# render 'devise/errors', resource: resource %> 
    <div class="row"> 
    <div class="input-field col s12"> 
     <%= f.text_field :full_name, :class => "validate", :required => true, :placeholder => "Robin Smith" %> 

     <%# f.label :full_name, :class => "allcaps active", :data => {:error => 'Name Required'} %> 
     <%= f.label :full_name, :class => "allcaps" %> 
    </div> 
    </div> 

    <div class="row"> 
    <div class="input-field col s12"> 
     <%= f.email_field :email, :class => "validate", :required => true, placeholder: " " %> 
     <%= f.label :email, :class => "allcaps" %> 
    </div> 
    </div> 

    <div class="row"> 
    <div class="input-field col s12"> 
     <%= f.password_field :password, :class => "validate", :required => true, placeholder: " " %> 
     <%= f.label :password, "password (min 6 chars)", :class => "allcaps" %> 
    </div> 
    </div> 

    <div class="button-container"> 
    <button class="waves-effect btn-flat btn-large"type="submit" name="action">Join Now</button> 
    </div> 
<% end %> 

Я могу пойти в mydomain.com/register и появится форма. Но при неудачной попытке регистрации они перенаправляются на корневой URL-адрес вместо повторной рендеринга страницы реестра с ошибками.

Я чувствую, что на моих маршрутах должно быть что-то не так. Есть идеи?

ответ

8

Вы можете переопределить Разрабатывают создать действие и перенаправлять на ваш URL:

# registrations_controller.rb 
class RegistrationsController < Devise::RegistrationsController 

    def create 
    build_resource(sign_up_params) 

    resource.save 
    yield resource if block_given? 
    if resource.persisted? 
     if resource.active_for_authentication? 
     set_flash_message! :notice, :signed_up 
     sign_up(resource_name, resource) 
     respond_with resource, location: after_sign_up_path_for(resource) 
     else 
     set_flash_message! :notice, :"signed_up_but_#{resource.inactive_message}" 
     expire_data_after_sign_in! 
     respond_with resource, location: after_inactive_sign_up_path_for(resource) 
     end 
    else 
    clean_up_passwords resource 
    set_minimum_password_length 
    resource.errors.full_messages.each {|x| flash[x] = x} 
    #redirect_to your_path 
    end 
    end 

end 

И в маршрутах:

resources :users 
    devise_for :users, path: '', path_names: { sign_up: 'register', sign_in: 'login', sign_out: 'logout'}, :controllers => { :registrations => "registrations", :omniauth_callbacks => "callbacks" } 
Смежные вопросы