我的目标是,只有当您访问匹配'邀请/:代码',即sign_up: 'invite/:code'
并确保sign_in页面具有默认/等效功能的网址时,才能访问sign_up页面。
我的sign_up路线运行良好,但sign_in已损坏。
我的routes.rb
文件包含以下代码:
devise_for :users, {
# skip: [:sessions],
controllers: {
omniauth_callbacks: "users/omniauth_callbacks",
registrations: "invite",
},
path: '',
path_names: {
sign_up: 'invite/:code',
sign_in: 'sign_in'
}
}
# as :user do
# get 'sign_in', to: 'devise/sessions#new', as: :new_user_session
# post 'sign_in', to: 'devise/sessions#create', as: :user_session
# delete 'sign_out', to: 'devise/sessions#destroy', as: :destroy_user_session
# end
注释掉的线条是我感到困惑的,不确定我是否需要它们。
当我访问/sign_in
时,我收到以下错误:
No route matches {:action=>"new", :controller=>"invite"}, missing required keys: [:code]
似乎sign_in仍在尝试使用我的自定义注册控制器或其他东西,不确定。
我的rake routes
输出此位:
new_user_session GET /sign_in(.:format) devise/sessions#new
user_session POST /sign_in(.:format) devise/sessions#create
这里有更多rake routes
内容:
new_user_session GET /sign_in(.:format) devise/sessions#new
user_session POST /sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /sign_out(.:format) devise/sessions#destroy
user_facebook_omniauth_authorize GET|POST /auth/facebook(.:format) users/omniauth_callbacks#passthru
user_facebook_omniauth_callback GET|POST /auth/facebook/callback(.:format) users/omniauth_callbacks#facebook
new_user_password GET /password/new(.:format) devise/passwords#new
edit_user_password GET /password/edit(.:format) devise/passwords#edit
user_password PATCH /password(.:format) devise/passwords#update
PUT /password(.:format) devise/passwords#update
POST /password(.:format) devise/passwords#create
cancel_user_registration GET /cancel(.:format) invite#cancel
new_user_registration GET /invite/:code(.:format) invite#new
edit_user_registration GET /edit(.:format) invite#edit
user_registration PATCH / invite#update
PUT / invite#update
DELETE / invite#destroy
POST / invite#create
答案 0 :(得分:0)
我愚蠢,没有仔细查看错误消息。错误来自于调用new_registration_path
帮助器(sign_up)的部分错误,而我没有将code
作为参数传递。
所以解决方案是改变这个:
new_registration_path(resource_name)
到此:
new_registration_path(resource_name, :code => 'foo')