Railsのconfig/routes.rbの書き方を冗長で自明にした
何をしたか
Railsのconfig/routes.rbの書き方にいい加減嫌気がさしたので単純を羅列する方法に変えた。
自分一人ならレールに乗るのもいいけど、複数人でさわるならわかりやすさ重視の方がいいとおもう。
変更前
Rails.application.routes.draw do root to: 'root#index' resources :books, except: [:destroy] do scope module: :books do resources :authors, only: [:index, :show] do resource :emails end end end end
変更後
Rails.application.routes.draw do root to: 'root#index' get 'books' => 'books#index' , as: :books get 'books/:id' => 'books#show' , as: :book post 'books' => 'books#create' patch 'books/:id' => 'books#update' get 'books/:book_id/authors' => 'books/authors#index', as: :book_authors get 'books/:book_id/authors/:id' => 'books/authors#show' , as: :book_author get 'books/:book_id/authors/:author_id/emails' => 'books/emails#show' , as: :book_author_emails post 'books/:book_id/authors/:author_id/emails' => 'books/emails#create' patch 'books/:book_id/authors/:author_id/emails' => 'books/emails#update' delete 'books/:book_id/authors/:author_id/emails' => 'books/emails#destroy' end
文字が多いとか縦に伸びるとかデメリットもないでもないけど、見ただけで分かるという点で、自分はこれでいいとおもった。
配列の要素を条件によって2つに割ってループしたい
配列の中のものに同じ処理を施すんだけど、先に奇数を処理してから、偶数を処理したい。
numbers = [1,2,3,4,5,6,7,8,9,10] numbers.select{|n| n.odd?}.each{|n| puts n*n} numbers.reject{|n| n.odd?}.each{|n| puts n*n}
Array#rejectとかselectでは、条件によって割ることができなくって、探したらArray#partitionがあった。
numbers.partition{|n| n.odd?} #=> [[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]]
都合よく前半後半に分割されたので、flattenしてeachできた。
numbers.partition{|n| n.odd?}.flatten.each{|n| puts n*n}
剰余算の自己代入の優先順位
よく変数に数を足し込むときには、+=を使う。
これと同じように掛け算、割り算も*=、/=が使えるけれど、この場合の四則演算の優先順位が気になったのでやってみたメモ。
a = 120 a /= 12 + 3 puts a #=> 8 # 120 / (12 + 3) = 8 # 120 / 12 + 3 = 13 b = 12 b *= 5 + 3 puts b #=> 96 # 12 * (5 + 3) = 96 # 12 * 5 + 3 = 63
よって、右辺が計算された結果が先に格納された値と演算しているということがわかった。