ActiveRecord::Base#attribute_names で取得できるけど、has_many などで定義された属性名は取得できない。アソシエーションで定義された属性は
ActiveRecord::Base#reflections 経由で取得できる。
ActiveRecord::Base#attribute_names は文字列の配列を返すけど、こっちはシンボルの配列を返す。
ActiveRecord::Base#attribute_names で取得できるけど、has_many などで定義された属性名は取得できない。ActiveRecord::Base#reflections 経由で取得できる。
ActiveRecord::Base#attribute_names は文字列の配列を返すけど、こっちはシンボルの配列を返す。
まあ、普通に考えたら 2 かな?というわけで、空コミットするお仕事に戻ります。
rake routes FILL_NAME=yesと呼び出すと、従来は
blog_posts GET /blogs/:blog_id/posts(.:format) posts#index
POST /blogs/:blog_id/posts(.:format) posts#create
new_blog_post GET /blogs/:blog_id/posts/new(.:format) posts#new
edit_blog_post GET /blogs/:blog_id/posts/:id/edit(.:format) posts#edit
blog_post GET /blogs/:blog_id/posts/:id(.:format) posts#show
PUT /blogs/:blog_id/posts/:id(.:format) posts#update
DELETE /blogs/:blog_id/posts/:id(.:format) posts#destroy
blogs GET /blogs(.:format) blogs#index
POST /blogs(.:format) blogs#create
new_blog GET /blogs/new(.:format) blogs#new
edit_blog GET /blogs/:id/edit(.:format) blogs#edit
blog GET /blogs/:id(.:format) blogs#show
PUT /blogs/:id(.:format) blogs#update
DELETE /blogs/:id(.:format) blogs#destroy
こうだった rake routes の結果が、
blog_posts GET /blogs/:blog_id/posts(.:format) posts#index
blog_posts POST /blogs/:blog_id/posts(.:format) posts#create
new_blog_post GET /blogs/:blog_id/posts/new(.:format) posts#new
edit_blog_post GET /blogs/:blog_id/posts/:id/edit(.:format) posts#edit
blog_post GET /blogs/:blog_id/posts/:id(.:format) posts#show
blog_post PUT /blogs/:blog_id/posts/:id(.:format) posts#update
blog_post DELETE /blogs/:blog_id/posts/:id(.:format) posts#destroy
blogs GET /blogs(.:format) blogs#index
blogs POST /blogs(.:format) blogs#create
new_blog GET /blogs/new(.:format) blogs#new
edit_blog GET /blogs/:id/edit(.:format) blogs#edit
blog GET /blogs/:id(.:format) blogs#show
blog PUT /blogs/:id(.:format) blogs#update
blog DELETE /blogs/:id(.:format) blogs#destroy
こうなります。
% rake routes | peco | awk '{print $1}' | pbcopy
とかできたら便利じゃないですかね?rake routes だと名前があったりなかったりで欲しいものが取れないので、こんな gem を作りました。rake routes はもっさりなので
% rake routes FILL_NAME=yes > .routesってあらかじめしておいて、
% cat .routes | peco | awk '{print $1}' | pbcopy
ってところですかね。proutes として .zshrc に登録しました。% cat .routes | peco | awk '{print $1}' | tr -d '\n' | pbcopy
rake routes にないの?って思ってコード読んでたら、こんなの発見した。
rake routes CONTROLLER=books とすれば books_controller に関する routes だけが取れる。知らなかった。パイプ使って grep してた #rails
— pinzolo (@pinzolo) 2014, 8月 13
いや〜知らんかった。
locales/ja.yml には ActiveModel の設定は入っていないので、プラグインの locales/ja.yml に書くことになる。locales/ja.yml から ActiveRecord 用の設定をコピーしてくることになりがち。
こんな感じに。ActiveModel::Model を使うだろうから、サンプルコードはずいぶん変わると思います。activemodel.errors.messages.xxx な i18n のキーを my_model.errors.messages.xxx とかにしたかった。i18n_scope をオーバーライドしてやるんだけど、全モデルクラスに書くのは嫌なので、インクルードするだけの共通モジュールを書くことに。
ActiveSupport::Concern は ClassMethods モジュールを反映させてから included のブロックを実行するので、再度デフォルトで上書きしてしまう。
alias_method_chain を使うなどして extend ActiveModel::Translation の後にオーバーライドしてやればいい。