我想使用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'作爲參數。 –