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
?
谢谢.
将此写入路径文件而不是添加 :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)
归档时间: |
|
查看次数: |
4626 次 |
最近记录: |