kat*_*tie 40 ruby-on-rails devise
设备中的控制器是否自动生成?你如何访问它们?
我知道你的观点
rails generate devise_views.
Eri*_*man 41
假设您想要查看这些控制器以便修改或覆盖它们,Devise现在提供了一个简单的生成器,可以在您的应用程序中重新创建它们的控制器以简化这些操作.根据文档(将是最新的):
1)使用需要范围的生成器创建自定义控制器:
安慰
rails generate devise:controllers [scope]
Run Code Online (Sandbox Code Playgroud)
如果指定users作为范围,则将在中创建控制器app/controllers/users/.会话控制器将如下所示:
class Users::SessionsController < Devise::SessionsController
# GET /resource/sign_in
# def new
# super
# end
...
end
Run Code Online (Sandbox Code Playgroud)
2)告诉路由器使用此控制器:
devise_for :users, controllers: { sessions: "users/sessions" }
Run Code Online (Sandbox Code Playgroud)
3)将视图复制devise/sessions到users/sessions.由于控制器已更改,因此不会使用位于的默认视图devise/sessions.
4)最后,更改或扩展所需的控制器操作.
您可以完全覆盖控制器操作:
class Users::SessionsController < Devise::SessionsController
def create
# custom sign-in code
end
end
Run Code Online (Sandbox Code Playgroud)
或者您可以简单地向其添加新行为:
class Users::SessionsController < Devise::SessionsController
def create
super do |resource|
BackgroundWorker.trigger(resource)
end
end
end
Run Code Online (Sandbox Code Playgroud)
这对于在某些操作期间触发后台作业或记录事件非常有用.
请记住,Devise使用Flash消息让用户知道登录是成功还是失败.设计预计您的应用程序调用flash[:notice]并flash[:alert]适当.不要打印整个Flash哈希,只打印特定的键.在某些情况下,Devise会为:timedout闪存哈希添加一个密钥,而不是用于显示.如果要打印整个哈希,请从哈希中删除此键.
Mat*_*ira 40
Devise使用内部控制器,您可以在自己的代码中访问和子类.他们在Devise模块下.例如,扩展RegistrationsController:
class MembershipsController < Devise::RegistrationsController
# ...
end
Run Code Online (Sandbox Code Playgroud)
然后,您所要做的就是配置Devise的路由以使用您的控制器:
devise_for :members, :controllers => { :registrations => 'memberships' }
Run Code Online (Sandbox Code Playgroud)
ind*_*ndb 11
$ rails generate devise:controllers SCOPE [options]
选项:-c,[ - 控制器=一二三]
使用-c指定要覆盖的控制器.如果未指定控制器,则将创建所有设计控制器.例如:
rails generate devise:controllers users -c = sessions
这将在app/controllers/users/sessions_controller.rb中创建一个控制器类,如下所示:
class Users::ConfirmationsController < Devise::ConfirmationsController
content...
end
Run Code Online (Sandbox Code Playgroud)
小智 9
下面一个是 Rails 5
使用以下命令生成 rails 设计控制器:
rails generate devise:controllers users
Run Code Online (Sandbox Code Playgroud)
如果您修改了上面生成的控制器,请将以下行添加到routes.rb,
devise_for :users, controllers: {registrations:'user/registrations'}
Run Code Online (Sandbox Code Playgroud)
您的修改将在您重新启动 rails 服务器后生效
| 归档时间: |
|
| 查看次数: |
36554 次 |
| 最近记录: |