devise_inviable,删除待处理的邀请

devise_inviable, delete pending invitation

我有一个 Rails 应用程序,其中 Users 可以邀请 MembersTeams,为此我尝试使用 gem devise_invitable。到目前为止它运行良好,但在删除待处理邀请时我遇到了一些问题 运行。例如,如果用户输入了错误的电子邮件地址,我希望他/她能够删除邀请。但我无法让它工作。我的路线是这样设置的:

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

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

我的自定义 "users/invitations"(放置在 controllers/users/invitations_controller.rb)控制器的相关部分如下所示:

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

我尝试 link destroy 这样的操作:

= 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")

我的 Invitation 模型如下所示:

class Invitation < ActiveRecord::Base

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

end

我目前在点击 link 时出现以下错误:

Routing Error
uninitialized constant InvitationsController

我不完全确定如何解决它或我可能错过了什么。不是 100% devise_invitable 是适合我现在需要的 gem。

有什么想法可以让它发挥作用吗?

我运行宁rake routes后的相关路线:

# 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

新路线指向例如users/invitations#destroy

我假设您正试图指向 Users::InvitationsController,它与 InvitationsController 不同——后者不存在。您需要将此事告知 routes.rb

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