也有类似的问题,但我已经过去了,但都没有申请过。
我正在使用Devise和Devise invitations。 Rails 3.2.6。
棘手的是我有两个用户模型。用户和单个表继承设置,其中Artist继承自User。我有两个邀请控制器,允许分别向用户和艺术家发送邀请。
现在的问题是艺术家无法接受他们的邀请。在提交更新密码的表单后,他们会收到406不可接受的错误。
相关守则:
devise_for :users,
:class_name => User,
:controllers => { :invitations => 'user/invitations' }
namespace :artist do
# Special route for devise, artists invitation
devise_scope :user do
resource :invitation, :controller => :invitations, :only => [:create, :new, :update] do
get :accept, :action => :edit
end
end
end
class Artist::InvitationsController < Devise::InvitationsController
respond_to :html
# PUT /resource/invitation
def update
self.resource = Artist.accept_invitation!(params[resource_name])
if resource.errors.empty?
resource.pending
flash[:notice] = "Welcome, complete your artist agreement to get started"
sign_in(:user, resource)
respond_with resource, :location => after_accept_path_for(resource)
else
respond_with_navigational(resource){ render :edit }
end
end
end
<%= form_for resource, :as => resource_name, :url => artist_invitation_path(resource_name), :html => { :method => :put } do |f| %>
<%= f.hidden_field :invitation_token %>
<%= f.label :password, class: 'control-label' %>
<%= f.password_field :password, :placeholder => 'Enter a password' %>
<%= f.label :password_confirmation, class: 'control-label' %>
<%= f.password_field :password_confirmation, :placeholder => 'Confirm your password' %>
<%= f.submit "Set my password", :'data-disable-with' => "Hang on..." %>
<% end %>
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:236
Content-Type:application/x-www-form-urlencoded
Request URL:http://localhost:3000/artist/invitation.user
Request Method:POST
Status Code:406 Not Acceptable
我可以看到格式中的某些内容必须关闭,因为响应会将.user添加到最后。我不能为我的生活看到为什么或在哪里发生这种情况。如果我遗漏了任何有用的信息,请告诉我。
答案 0 :(得分:1)
终于明白了。
关键是要准确了解resource_name在整个表单和控制器操作中给出的内容。在我的情况下,它继续回退到:用户需要时:艺术家和评论中提到的Frost,如果您注意使用resource_name的位置,生成的表单html会发生很大变化。需要重写控制器中的更新操作以使用:artist direct并且需要调整form_for以从参数和:as参数中删除resource_name。