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
の後にオーバーライドしてやればいい。