【问题标题】:devise_inviable, delete pending invitationdevise_invitable,删除待处理的邀请
【发布时间】:2016-04-25 20:49:14
【问题描述】:

我有一个 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

我尝试像这样链接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

当我点击链接时,我目前收到以下错误:

Routing Error
uninitialized constant InvitationsController

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

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

我跑完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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 devise devise-invitable


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,这似乎有所帮助,但不幸的是我遇到了另一个问题。我现在收到以下错误:NoMethodError in Users::InvitationsController#destroy undefined method name for nil:NilClass# Proxy to devise map name def resource_name devise_mapping.name end alias :scope_name :resource_name
    • 所以,听起来它已经达到了你想要的方法,但是接下来会发生不好的事情吗?可能需要他们走向不同的方向。发帖rake routes(上述更改之前);这会让我知道该更改是否可取,或者是否正在发生其他不相关的事情。
    • 实际上我的destroy 操作没有被调用,而不是devise_invitable 方法被调用,def resource_name,错误说devise_mapping.name 为零(devise_mapping 为零)。
    • @Anders 好的。发布rake routes的结果
    • 我已经用新路线更新了我原来的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多