【问题标题】:Rails + Devise - registration_path is wrong after editing the default routesRails + Devise - 编辑默认路由后registration_path错误
【发布时间】:2012-01-13 15:27:02
【问题描述】:

在我的编辑个人资料页面中

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %>

在我的路线中

  devise_for :users, 
    :controllers => { 
      :registrations => "registrations", 
      :sessions => "sessions", 
      :invitations => 'invitations' 
    },
    :path => '/',
    :path_names => {
        :sign_in  => 'login',
        :sign_out => 'logout',
        :sign_up => 'signup'
    }

  devise_scope :user do
    root :to => "registrations#new"
    get '/me/profile' => 'registrations#edit', :as => "myprofile"
    get "/me/invites" => 'invitations#new', :as => 'myinvites'
  end

耙路线:

        new_user_session GET        /login(.:format)                                    {:action=>"new", :controller=>"sessions"}
            user_session POST       /login(.:format)                                    {:action=>"create", :controller=>"sessions"}
    destroy_user_session DELETE     /logout(.:format)                                   {:action=>"destroy", :controller=>"sessions"}
cancel_user_registration GET        /cancel(.:format)                                   {:action=>"cancel", :controller=>"registrations"}
       user_registration POST       /                                                   {:action=>"create", :controller=>"registrations"}
   new_user_registration GET        /signup(.:format)                                   {:action=>"new", :controller=>"registrations"}
  edit_user_registration GET        /edit(.:format)                                     {:action=>"edit", :controller=>"registrations"}
                         PUT        /                                                   {:action=>"update", :controller=>"registrations"}
                         DELETE     /                                                   {:action=>"destroy", :controller=>"registrations"}
                    root            /                                                   {:controller=>"registrations", :action=>"new"}
               myprofile GET        /me/profile(.:format)                               {:controller=>"registrations", :action=>"edit"}

现在,当我包含 :path =&gt; '/' 时,我的编辑用户个人资料页面不再起作用。单击更新个人资料不会更新我的用户个人资料。

编辑用户个人资料表单现在是action = '/'(不起作用)而不是以前的action = '/users'(起作用)

【问题讨论】:

  • 请发布相关rake routes字段
  • 编辑并添加了 rake 路由。 '/' 路由似乎有些奇怪。

标签: ruby-on-rails devise


【解决方案1】:

我相信

...,
:controllers => { 
      :registrations => "registrations", 
      :sessions => "sessions", 
      :invitations => 'invitations' 
    },
    :path => '/',
    :path_names => {
        :sign_in  => 'login',
        :sign_out => 'logout',
        :sign_up => 'signup'
    }

不需要。你只需要devise_for :usersstated in the README.rdoc

希望这会有所帮助。

【讨论】:

  • 它们不需要运行,但需要用于自定义。
  • stackoverflow.com/questions/3827011/… 所述,我添加这些是因为我不希望“users/sign_in”等发挥作用。我只希望 /login 成为唯一的登录位置。
【解决方案2】:

the Devise Github Wiki 部分描述了设置自定义设计路线。

但是,删除映射(在本例中为“用户”)并不完全清楚。 所描述的:path =&gt; '' 也破坏了一些东西。

所以如果你想: /sign_in 而不是 /users/sign_in/register 而不是 /users/register, 等等。

你可以做什么:

为会话和注册创建自定义控制器。 在这些控制器集中:

class Users::RegistrationsController < Devise::RegistrationsController

  prepend_before_filter :set_devise_mapping

private

  def set_devise_mapping
    request.env["devise.mapping"] ||= Devise.mappings[:user]
  end

end

Users::SessionsController &lt; Devise::SessionsController 相同)

接下来将以下内容添加到您的 routes.rb 中:

  devise_for :users,
    :skip => [:sessions, :registrations],
    :controllers => {
      :omniauth_callbacks => 'users/omniauth_callbacks',
      :registrations => 'users/registrations',
      :passwords => 'users/passwords',
      :sessions => 'users/sessions'
    },
  # Setting empty path gives errors in registration_path.
  # So we overwrite them here.
  get 'sign_in' => 'users/sessions#new', :as => :new_user_session
  post 'sign_in' => 'users/sessions#create', :as => :user_session
  delete 'sign_out' => 'users/sessions#destroy', :as => :destroy_user_session
  get 'register' => 'users/registrations#new', :as => :new_user_registration
  post 'register' => 'users/registrations#create', :as => :user_registration

要同时允许帐户编辑,您应该添加自己的编辑和更新路由:

  namespace :users do
    resource :registration, only: [:edit, :update], path: ''
  end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-25
    • 2011-09-29
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多