如何使用params设计sign_in和sign_up(会话/注册)的单独路由

时间:2017-06-20 21:43:15

标签: ruby-on-rails devise routes ruby-on-rails-5 rails-routing

我的目标是,只有当您访问匹配'邀请/:代码',即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

1 个答案:

答案 0 :(得分:0)

我愚蠢,没有仔细查看错误消息。错误来自于调用new_registration_path帮助器(sign_up)的部分错误,而我没有将code作为参数传递。

所以解决方案是改变这个:

new_registration_path(resource_name)

到此:

new_registration_path(resource_name, :code => 'foo')
相关问题