自定义设计注册路由以接受:invite_token作为rails中URL的一部分

时间:2015-03-18 18:21:52

标签: ruby-on-rails devise routing

我想自定义设计注册路由路径以接受和选择:邀请结尾的invitation_token。

例如

传入的网址将是

http://mywebsite.com/tenants/sign_up/kEjte

这将使用邀请代码设置一些隐藏的属性字段。

如果没有邀请代码,则默认返回原始行为

我已经使用自己的RegistrationsController.rb覆盖了注册控制器

这是我的路线

  devise_for :tenants  ,:controllers => { :registrations => "registrations" }

这是我倾斜的路线

 new_tenant_session GET    /tenants/sign_in(.:format)                           devise/sessions#new
          tenant_session POST   /tenants/sign_in(.:format)                           devise/sessions#create
  destroy_tenant_session DELETE /tenants/sign_out(.:format)                          devise/sessions#destroy
         tenant_password POST   /tenants/password(.:format)                          devise/passwords#create
     new_tenant_password GET    /tenants/password/new(.:format)                      devise/passwords#new
    edit_tenant_password GET    /tenants/password/edit(.:format)                     devise/passwords#edit
                         PATCH  /tenants/password(.:format)                          devise/passwords#update
                         PUT    /tenants/password(.:format)                          devise/passwords#update

cancel_tenant_registration GET /tenants/cancel(.:format)注册#encept          tenant_registration POST /tenants(.:format)registrations #create      new_tenant_registration GET /tenants/sign_up(.:format)注册#new     edit_tenant_registration GET /tenants/edit(.:format)注册#edit                              PATCH /tenants(.:format)注册#update                              PUT /租户(。:format)注册#update                              DELETE /tenants(.:format)注册#stroy

我已经阅读了关于Devise的wiki文章,但我无法弄明白。 任何人都可以帮我一把吗?

编辑*

好的,所以我对路线进行了一些修改

这是修改后的路线

  devise_for :tenants  ,:controllers => { :registrations => "registrations" }


  devise_scope :tenants do
    get "/tenants/sign_up/:invitation_token" => "registrations#new"
  end

这是倾斜的路线

tenant_registration POST   /tenants(.:format)                                   registrations#create
 new_tenant_registration GET    /tenants/sign_up(.:format)                           registrations#new
edit_tenant_registration GET    /tenants/edit(.:format)                              registrations#edit
                         PATCH  /tenants(.:format)                                   registrations#update
                         PUT    /tenants(.:format)                                   registrations#update
                         DELETE /tenants(.:format)                                   registrations#destroy
                         GET    /tenants/sign_up/:invitation_token(.:format)         registrations#new

似乎路线现在接受邀请令牌,但是当我输入类似

的内容时
http://localhost:3000/tenants/sign_up/KjEid

Devises给我以下错误

AbstractController::ActionNotFound at /tenants/sign_up/KjEid 
Could not find devise mapping for path "/tenants/sign_up/KjEid".This may      happen for two reasons:

是什么给出的?为什么不接受令牌参数?

2 个答案:

答案 0 :(得分:0)

尝试以下代码段。我假设你的注册控制器新代码中有代码来控制新参数。

devise_for :tenants  ,:controllers => { :registrations => "registrations" }  as :tenants do
    get 'sign_up/:invite_key' => 'registrations#new'
    get 'sign_up' => 'registrations#new'
end

答案 1 :(得分:0)

我想通了,它假设是

  devise_for :tenants  ,:controllers => { :registrations => "registrations" }


  devise_scope :tenant do
    get "/tenants/sign_up/:invitation_token" => "registrations#new"
  end

我有devise_scope :tenantS do

之前,这就是设计抱怨的原因