我正在尝试使用JSON让Devise与所有的请求/响应一起纯粹地在AJAX上工作。
到目前为止,我的代码如下:
我已经开始使用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)我做错了什么?
发布于 2015-05-22 01:55:38
更改您的devise.rn初始值设定项,添加以下行:
config.navigational_formats = ['*/*', :html, :json]你做了正确的RegistrationsController,但你需要告诉devise使用你的而不是他的。
将您的routes.rb更改为:
devise_for :users, controllers: {registrations: "users/registrations"}发布于 2015-05-22 01:58:16
在视图中更改此行。
<%= 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| %>您发送给devise的Post Ajax请求应该是。
POST "/users.json"而不是
POST "/users"https://stackoverflow.com/questions/30379730
复制相似问题