如何在路由文件中链接devise_for调用? - Rails 3.1

mar*_*ion 1 ruby-on-rails devise ruby-on-rails-3 ruby-on-rails-3.1

我正在尝试使用OmniAuth,根据Ryan Bates的说法,我应该通过devise_for在我的routes.rb文件中指定以下范围来覆盖Devise Registration控制器:

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

但是,根据Devise's文档,如果我要自定义path_names,那么mydomain.com/users/sign_up/我可以做mydomain.com/register,而不是做,我必须做这样的事情:

devise_for :users, :path_names => { :sign_up => "register", :sign_in => "login", :sign_out => "logout", :settings => "settings", :newpass => "newpass", :changepass => "changepass" }
Run Code Online (Sandbox Code Playgroud)

我试图像这样链接他们两个:

devise_for :users, :controllers => {:registrations => 'registrations'}, :path_names => { :sign_up => "register", :sign_in => "login", :sign_out => "logout", :settings => "settings", :newpass => "newpass", :changepass => "changepass" }
Run Code Online (Sandbox Code Playgroud)

但这不起作用.为了让我去看我的观点views/registrations/new.html.erb,我得去mydomain.com/users/register.如果我去mydomain.com/register它仍然服务它/views/devise/registrations/new.html.erb.

我怎么mydomain.com/register指向/views/registrations/new.html.erb

谢谢.

Muh*_*lid 7

将此写入路径文件而不是添加 :path_name

devise_scope :user do
   get "register", :to => "devise/registrations#new"
   get "login", :to => "devise/sessions#new"
   get "logout", :to => "devise/sessions#destroy"
end
Run Code Online (Sandbox Code Playgroud)

_edit2_ _

如果要覆盖控制器,则需要将gem中的设计控制器文件夹复制到app/controllers下的应用程序中.在这种情况下,您还需要在routes.rb文件中写下以下行.如果您不想覆盖设计控制器的默认功能,则无需在routes.rb文件中添加以下行.

devise_for :users, :controllers => {
      :registrations => 'devise/registrations',
      :sessions => 'devise/sessions',
      :passwords => 'devise/passwords',
      :confirmations => 'devise/confirmations',
      :unlocks => 'devise/unlocks'
  }
Run Code Online (Sandbox Code Playgroud)