ログインした認証情報をテーブルの作成者、更新者にセットしてくれるRailsプラグインuserstamp。
Railsのコントローラからモデルへデータをどう渡してるのか見てみると、指定したクラスのクラス変数に保持してる。
結局、Railsのプロセスが1リクエスト1プロセスで動作しているため、クラス変数が持ち回され、その値がモデル毎に上書きされてもモデル呼び出しの順序が保障されてる。
Servletとかだとスレッドセーフでない方法だが、Railsの1リクエスト1プロセスという制約がそれを可能にしている。
ずっとServletベースのWebアプリを開発してきたのでちょっと気持ち悪く感じるが、これがRailsで1プロセスで処理を集中させるの方式とJavaみたいに起動時にどかっとプロセス取得してそれをVMが内部で割り当てるといった方式の違いなんだろう。結局プログラミングモデルの違いを改めて実感。
Railsのプラグインとか、レイヤーをまたぐデータの受け渡しにクラス変数化が結構使われてるんだろうな。