0

Ich habe eine Rails App, in der UsersMembers zu Teams einladen kann, um dies zu tun, habe ich versucht, den Edelstein devise_invitable zu verwenden. Es hat bis jetzt gut funktioniert, aber ich habe einige Probleme beim Löschen von ausstehenden Einladungen bekommen. Wenn der Benutzer beispielsweise die falsche E-Mail-Adresse eingegeben hat, möchte ich, dass er die Einladung löschen kann. Aber ich kann es nicht zur Arbeit bringen. Meine Strecken ist wie folgt aufgebaut:devise_iniviable, löschen ausstehende Einladung

devise_for :users, :controllers => {sessions: "users/sessions", registrations: "users/registrations", invitations: "users/invitations"} 

resources :teams do 
    resources :invitations 
    [...] 

Die relevanten Teile meiner benutzerdefinierten "users/invitations" (platziert in Controller/users/invitations_controller.rb) -Controller wie folgt aussieht:

class Users::InvitationsController < Devise::InvitationsController 

    before_action :set_invitation, only: [:destroy] 

    def destroy 
    This currently never gets called 
    team = @invitation.team 
    @invitation.destroy 
    respond_to do |format| 
     format.html { redirect_to edit_team_path(team) } 
     format.json { head :no_content } 
    end 
    end 

Ich versuche, das zu verbinden die destroy Aktion wie folgt aus:

= link_to team_invitation_path(@team, invitation), method: :delete, data: { confirm: 'Are you sure you want to delete this invitation?'}, class: "label label-danger label-pill pull-xs-right" do 
    = icon("trash-o") 

Mein Invitation Modell sieht wie folgt aus:

class Invitation < ActiveRecord::Base 

    belongs_to :member 
    belongs_to :team 
    validates_presence_of :recipient_email 
    enum status: [ :pending, :accepted ] 

end 

ich zur Zeit die folgende Fehlermeldung, wenn ich auf den Link klicken:

Routing Error 
uninitialized constant InvitationsController 

ich nicht ganz sicher bin, wie es zu lösen oder, was ich verpasst haben kann. Nicht 100%, dass devise_invitable das richtige Juwel für meine Bedürfnisse ist.

Irgendwelche Ideen, was ich tun kann, damit es funktioniert?

Meine relevanten Strecken nach rake routes läuft:

# These were here before as well 
accept_user_invitation GET /users/invitation/accept(.:format)                   
users/invitations#edit 
remove_user_invitation GET /users/invitation/remove(.:format)                   users/invitations#destroy 
user_invitation POST /users/invitation(.:format)                     users/invitations#create 
new_user_invitation GET /users/invitation/new(.:format)                    users/invitations#new 

# My custom/new team invitation routes 
team_invitations 
GET /teams/:team_id/invitations(.:format)                  users/invitations#index 
POST /teams/:team_id/invitations(.:format)                  users/invitations#create new_team_invitation 
GET /teams/:team_id/invitations/new(.:format)                  users/invitations#new edit_team_invitation 
GET /teams/:team_id/invitations/:id/edit(.:format)                 users/invitations#edit team_invitation 
GET /teams/:team_id/invitations/:id(.:format)                  users/invitations#show 
PATCH /teams/:team_id/invitations/:id(.:format)                  users/invitations#update 
PUT /teams/:team_id/invitations/:id(.:format)                 users/invitations#update 
DELETE /teams/:team_id/invitations/:id(.:format)                 users/invitations#destroy 

Die neuen Routen weisen auf z.B. users/invitations#destroy

Antwort

2

Ich nehme an, Sie versuchen, auf Users::InvitationsController zeigen, die anders als InvitationsController - die nicht existiert. Sie müssen routes.rb darüber informieren:

resources :teams do 
    resources :invitations, module: 'users' 
    ... 
    end 
end 
+0

Danke, das schien etwas zu helfen, aber ich lief leider in ein anderes Problem. Ich bekomme jetzt stattdessen den folgenden Fehler: 'NoMethodError in Users :: InvitationsController # zerstören undefinierten Methodenname für nil: NilClass'. SCOPE_NAME: '# Proxy Mapname def RESOURCE_NAME devise_mapping.name Ende alias entwickeln resource_name' – Anders

+0

So klingt wie es die Methode ist erreicht, wie man wollte, dann aber schlechte Dinge ergeben? Möglicherweise müssen sie eine andere Richtung gehen. Post 'Rake Routes' (vor der Änderung oben); Das wird mich wissen lassen, ob diese Änderung ratsam ist oder ob etwas anderes passiert. – GoGoCarl

+0

Eigentlich wird meine 'destroy' Aktion nicht aufgerufen, stattdessen wird eine' devise_invitable' Methode aufgerufen, 'def resource_name', und der Fehler besagt, dass' devise_mapping.name' gleich null ist (devise_mapping ist nil). – Anders

Verwandte Themen