前置き
最初に書いておきます、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 件のコメント :
コメントを投稿