Rails, Devise Inviti 406 Errore inaccettabile con STI
-
13-12-2019 - |
Domanda
Ci sono domande simili ma sono andato su di loro e nessuno di loro ha applicato.
Sto usando Devise e Devieni inviti . Rails 3.2.6.
La cosa complicata è che ho due modelli di utenti. Utente e un'installazione di ereditariele singola tavola in cui l'artista eredita dall'utente. Ho due controller di inviti per consentire l'invio di inviti separatamente sia agli utenti che agli artisti.
Il problema in questo momento è che gli artisti non sono in grado di accettare i loro inviti. Sulla forma inviare di aggiornare la password, ottengono un errore inaccettabile 406.
Codice rilevante:
Routing:
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
.
Controller Invitazioni Artist
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
.
Descrizione del modulo. modifica.html.erb.
<%= 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 %>
.
Accetta intestazioni
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
.
restituisce
Request URL:http://localhost:3000/artist/invitation.user
Request Method:POST
Status Code:406 Not Acceptable
.
Posso vedere che qualcosa nel formato deve essere spento a causa della risposta che aggiunge in quel .er fino alla fine. Non posso per la vita di me vedo perché o dove sta accadendo. Per favore fatemi sapere se ci sono informazioni che ho lasciato fuori che potrebbero aiutare.
Soluzione
ha capito, infine.
La chiave è sembrare precisamente a quale risorsa_name ti sta dando durante il modulo e le azioni del controller.Nel mio caso ha continuato a fallback a: utente quando è necessario essere: artista e come frost menzionato in un commento, il modulo generato HTML cambia notevolmente se si presta attenzione a dove viene utilizzato Risorsa_Name.L'azione di aggiornamento nel controller doveva essere sovrascritta a utilizzare: artista direttamente e il form_for necessario per essere modificato per rimuovere risorse_name da argomenti e: come argomento.