如何嵌套devise_invitable路由以邀请用户访问特定项目

Dan*_*May 4 ruby-on-rails devise

问题

我在项目管理网络应用程序上使用devisedevise_invitablegems.我成功邀请新用户加入网络应用.

但我需要的是邀请新用户参与特定项目,而无法弄清楚如何做到这一点.我需要将项目ID作为路径的一部分,以便我可以正确连接控制器代码.

上下文

相关routes.rb部分如下:

devise_for :users, :controllers => { :invitations => "invitations" }
Run Code Online (Sandbox Code Playgroud)

所以:

  • users/invitation/new 适用于新的邀请.
  • 我自己的invitations_controller.rb覆盖默认InvitationsController
  • 我有:projects一个我正在使用的资源,例如

     resources :projects do
       resources :milestones, :task ... etc
     end
    
    Run Code Online (Sandbox Code Playgroud)

(我认为)我希望做出像这样的工作:

users/invitation/projects/4f3423d34323/new
Run Code Online (Sandbox Code Playgroud)

Dan*_*May 5

目前的方法是使用devise_scope以下方法指定路线:

devise_for :users, :controllers => { :invitations => "invitations" }

devise_scope :user do 
   match "/projects/:project_id/invitations/new", :to => "invitations#new", :via => "get", :as => "new_project_invitation"
end  
Run Code Online (Sandbox Code Playgroud)

这意味着我可以使用:

案例1 :( users/invitation/new用于邀请新用户访问网络应用)

案例2 :( projects/:project_id/invitations/new用于邀请新用户访问网络应用+项目)

invitations_controller#new检查:project_id案例1或2的存在并调用适当的行为.