Q
设计后创建挂钩
11
A
回答
17
使用由Rails提供的标准after_create
回调。
class User < ActiveRecord::Base
after_create :do_something
def do_something
puts "Doing something"
end
end
4
如果您正在处理您创建的模型的内部状态,那么使用回调是完全合法的。
创建User
后,我需要创建默认的Team
。最好避免使用回调来处理其他对象。
“after_ *”回调函数主要用于保存或持久化对象。一旦物体被保存,物体的目的(即责任)就已经实现了,所以我们通常看到的是回传到其责任区之外,那就是当我们遇到问题时。
在这种情况下,最好是行为控制器,在那里你可以成为一个更清洁的解决方案直接添加你的功能,或delegate to a service上:
# shell
rails g devise:controllers users
# config/routes.rb
devise_for :users, controllers: { registrations: "users/registrations" }
# app/controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
after_action :create_default_team, only: :create
private
def create_default_team
Team.create_default(@user) if @user.persisted?
end
end
6
我使用Rails 4设计3.5 confirmable
,由于各种惊喜,不得不这样做。
class User < ActiveRecord::Base
# don't use after_create, see https://github.com/plataformatec/devise/issues/2615
after_commit :do_something, on: :create
private
def do_something
# don't do self.save, see http://stackoverflow.com/questions/22567358/
self.update_column(:my_column, "foo")
end
end
相关问题
- 1. 创建后挂钩
- 2. DRY FactoryGirl后创建/建立挂钩
- 3. 导轨设计挂钩on_login
- 4. 挂钩wcf服务创建
- 5. PR_Write挂钩后
- 6. 创建方法的操作挂钩或远程挂钩
- 7. 挂钩或监控服务创建
- 8. 如何挂钩MFC CWnd创建
- 9. prePersist创建文章时挂钩
- 10. 在woocommerce上创建挂钩,找到hook_names
- 11. 在SQLAlchemy中创建挂钩实体
- 12. 使用挂钩和SQLAlchemy创建表格
- 13. 挂钩创建c语言库
- 14. 创建挂钩失败:无效标头
- 15. 如何创建挂钩目录
- 16. VUE计算:从创建生命周期挂钩
- 17. 挂钩或不挂钩 - git
- 18. API无挂钩挂钩
- 19. 什么钩挂钩创建自定义帖子类型?
- 20. Git CHMOD后接收挂钩
- 21. Elastic MapReduce的后挂钩
- 22. 在moodle注册挂钩后
- 23. 挂钩过程最后
- 24. Subversion提交后挂钩
- 25. SVN更新后挂钩?
- 26. WordPress的挂钩:后加载
- 27. 成功安装后挂钩
- 28. 设置预挂钩jshint
- 29. gdb挂钩设置中断
- 30. 挂钩Eclipse构建过程?
我该如何使用它来访问用户?例如我想给用户一个使用Royce的默认角色,所以它只是'@ user',所以我可以做'@user.add_role:user' – Un3qual
@Un3qual' self' –
谢谢!我现在觉得很蠢。 – Un3qual