ActiveSupport::PerThreadRegistryでThread.currentより安全にグローバルな値を保持する╭( ・ㅂ・)و ̑̑
Railsでグローバルデータを保持したいときに、Thread.currentを使えば簡単ですよね
Thread.current[:current_user] = user Thread.current[:current_user] #=> user
僕も気軽に使ってましたが、最近こんな記事を見つけました。
Better globals with a tiny ActiveSupport module - Weissblog
Thread.currentを使わない方が良い理由
- キーがかぶってしまったらデータを上書きされるで!
- 構造化されてないで!
ActiveSupport::PerThreadRegistryを使うと同じcurrent_userでもデータを担保できます
class RequestRegistry extend ActiveSupport::PerThreadRegistry attr_accessor :current_user end class PhoneNumberApiRegistry extend ActiveSupport::PerThreadRegistry attr_accessor :current_user end RequestRegistry.current_user = user1 RequestRegistry.current_user #=> user1 PhoneNumberApiRegistry.current_user = user2 PhoneNumberApiRegistry.current_user #=> user2
てな感じです
ここらを参考にすれば良いみたいです
rails/runtime_registry.rb at master · rails/rails · GitHub
rails/explain_registry.rb at master · rails/rails · GitHub
Happy Hacking٩( ‘ω’ )و