前置き
最初に書いておきます、Rails3.2系の記事です。
Rails4だと
Rails4だと
ActiveModel::Model を使うだろうから、サンプルコードはずいぶん変わると思います。ActiveModel を利用したモデルで独自の i18n のセクションを利用したい
まあとある事情で、通常
そんな場合は
activemodel.errors.messages.xxx な i18n のキーを my_model.errors.messages.xxx とかにしたかった。そんな場合は
i18n_scope をオーバーライドしてやるんだけど、全モデルクラスに書くのは嫌なので、インクルードするだけの共通モジュールを書くことに。
最初にこんなのを書いた
しかし、これではうまくいかない。
問題点
ActiveSupport::Concern は ClassMethods モジュールを反映させてから included のブロックを実行するので、再度デフォルトで上書きしてしまう。
解決策
こんな風に
alias_method_chain を使うなどして extend ActiveModel::Translation の後にオーバーライドしてやればいい。
0 件のコメント :
コメントを投稿