2015-05-21 2 views
0

Я пытаюсь сделать работу Devise только на AJAX со всеми запросами/ответами, используя JSON.Rails - Can Ajaxify Devise

Вот мой код до сих пор:

Я начал с Devise::RegistrationsController:

class Users::RegistrationsController < Devise::RegistrationsController 
    respond_to :json 
end 

И моя соответствующая точка зрения:

<div class="row"> 
    <div class="col-lg-4"></div> 
    <div class="col-lg-4"> 

    <h1>Sign up</h1> 

    <%= form_for(resource, as: resource_name, url: registration_path(resource_name), remote: true, format: :json, html: {id: "registration"}) do |f| %> 
     <%= devise_error_messages! %> 

     <div class="form-group"> 
     <%= f.label :email %> 
     <%= f.email_field :email, autofocus: true, class: "form-control" %> 
     </div> 

     <div class="form-group"> 
     <%= f.label :password %> 
     <% if @validatable %> 
      (<%= @minimum_password_length %> characters minimum) 
     <% end %> 
     <%= f.password_field :password, autocomplete: "off", class: "form-control" %> 
     </div> 

     <div class="form-group"> 
     <%= f.label :password_confirmation %> 
     <%= f.password_field :password_confirmation, autocomplete: "off", class: "form-control" %> 
     </div> 

     <%= f.submit "Sign up", class: "btn btn-primary" %> 

    <% end %> 

    <%= render "users/shared/links" %> 

    </div> 
    <div class="col-lg-4"></div> 
</div> 

Запрос AJAX выполнен успешно, но я продолжайте получать ответ как HTML.

Вот запись журнала:

Started POST "/users" for ::1 at 2015-05-21 21:22:10 -0700 
Processing by Users::RegistrationsController#create as JS 
    Parameters: {"utf8"=>"✓", "user"=>{"email"=>"", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"} 
    (1.0ms) begin transaction 
    (0.3ms) rollback transaction 
    Rendered users/shared/_links.html.erb (2.2ms) 
    Rendered users/registrations/new.html.erb within layouts/application (20.0ms) 
Completed 200 OK in 444ms (Views: 361.7ms | ActiveRecord: 1.2ms) 

Что я делаю неправильно?

ответ

0

Изменить devise.rn initalizer добавив следующую строку:

config.navigational_formats = ['*/*', :html, :json] 

Вы сделали прямо на RegistrationsController, но вы должны сказать, изобрести, чтобы использовать ваш не его электронной.

Изменить routes.rb к этому:

devise_for :users, controllers: {registrations: "users/registrations"} 
+0

Это не работает для меня. Вы в этом уверены? Ты это пробовал? –

+0

Хорошо, я пропустил один шаг. Попробуйте снова. – lcguida

0

Измените эту строку в ваших взглядах.

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), remote: true, format: :json, html: {id: "registration"}) do |f| %> 

к этому вопросу.

<%= form_for(resource, as: resource_name, url: registration_path(resource_name, format: :json), remote: true, html: {id: "registration"}) do |f| %> 

Почтовый запрос Ajax, который вы отправляете для разработки, должен быть.

POST "/users.json" 

и не

POST "/users" 
+0

Сделал это, и теперь я получаю ошибку 422 необработанной сущности. Я также заметил, что все мои пути разработки теперь возвращают json, поэтому регистрационная форма не отображается, и я получаю объект пользователя как json. –

+0

Я отредактировал свой ответ, относящийся к вашему вопросу. – Rubysmith