我想使用after_save回调将updated_by列设置为current_user。但是current_user在模型中不可用。我应该怎么做?after_save回调将updated_by列设置为current_user
6
A
回答
8
您需要在控制器中处理它。首先在模型上执行保存,然后如果成功更新记录字段。
例
class MyController < ActionController::Base
def index
if record.save
record.update_attribute :updated_by, current_user.id
end
end
end
另一种替代方法(我喜欢这个)是创建模型中的一个自定义的方法,该方法包的逻辑。例如
class Record < ActiveRecord::Base
def save_by(user)
self.updated_by = user.id
self.save
end
end
class MyController < ActionController::Base
def index
...
record.save_by(current_user)
end
end
1
我已经实现了基于西蒙娜Carletti酒店的建议此猴补丁,据我可以告诉touch
只做时间戳,而不是用户ID。这有什么不对吗?这是设计用于设计current_user
。
class ActiveRecord::Base
def save_with_user(user)
self.updated_by_user = user unless user.blank?
save
end
def update_attributes_with_user(attributes, user)
self.updated_by_user = user unless user.blank?
update_attributes(attributes)
end
end
然后是create
和update
方法调用这些像这样:
@foo.save_with_user(current_user)
@foo.update_attributes_with_user(params[:foo], current_user)
相关问题
- 1. 编写由current_user设置created_by和updated_by的全局方法
- 2. Rails回调after_save未设置属性
- 3. 回调after_save的
- 4. 回调 - after_save但不创建
- 5. 轨after_save的回调条件
- 6. current_user在rails/devise中设置为零
- 7. 为DatetimepickerBundle设置回调
- 8. 为HttpResponse设置回调
- 9. 如何在rails中跳过after_save回调
- 10. 如何设置pytest的current_user?
- 11. 使用current_user设置CSS类
- 12. 如何将update_attributes设置为false的`current_user`存根?
- 13. 每当Activerecord触发一个回调:after_save回调触发器
- 14. after_save回调:TypeError:出价不能被强制转换为Fixnum
- 15. 将回调设置为回传后的任何控件
- 16. 在after_save回调中返回false和回滚
- 17. 将回调的范围设置为它的执行位置?
- 18. 将值设置为列表
- 19. 将INT列设置为空
- 20. 设置Twilio回调
- 21. 将HUDL设置为调试设备?
- 22. 设计辅助方法(current_user)返回零
- 23. 设计和current_user
- 24. 设计:current_user ==零?
- 25. 设计和current_user
- 26. Rails的after_save的回调函数被调用多次
- 27. 如何在使用'counter_cache'时调用after_save回调?
- 28. 如何将回调函数设置为EventEmitter中的第一个回调函数?
- 29. Javascript回调时变量设置为X
- 30. 如何为回调设置SuppressUnmanagedCodeSecurity?
+1触控方法:) – lucapette
之所以把它在模型的是,它是干的,因为保存( )可以从应用程序中的许多地方调用,而不仅仅是一个控制器。我宁愿只做一次,也不必重复我的自我,并担心总是记住设置它。 – pixelearth
然后创建一个新方法,如Model.save_from_user(用户),并在那里放置逻辑以保存记录并执行触摸操作。然后,在你的控制器中简单地调用该方法传递'current_user'作为参数。 –