ちょっとたまってきたのでメモがてらまとめます。
1. Hashを逆順にする
あるハッシュ
h = { "1" => "a", "2" => "c", "3" => "y", "4" => "x" }
を逆順の
{ "4" => "x", "3" => "y", "2" => "c", "1" => "a" }
にしたい場合、Array
のreverse
が使えます。
reversed_h = Hash[h.to_a.reverse]
ruby2.1以降であればもっとカンタン。
reversed_h = h.to_a.reverse.to_h
2. or
and
と||
&&
の優先順位に注意
演算子の優先順位がちがうので想定外の結果になることがしばしば。。
[1] pry(main)> a = true and false [2] pry(main)> a => true [3] pry(main)> a = true && false [4] pry(main)> a => false
たとえば、次のような予期せぬ結果を生みます。
true_and_false = true and false if true_and_false puts "true" else puts "false" end #=> true
Railsのハマりどころで有名らしいのですが、なかなか気付きにくい。。
基本的にand
or
を使う場合は()
で囲むか、||
&&
を使っていく方針が良さそう。
3. カレンダーとかセレクトボックスで便利なメソッド
all_month
を使えばd.beginning_of_month..d.end_of_month
みたいに長ったらしいメソッドを書かなくてすむ。
[6] pry(main)> d = Date.today => Sat, 13 Jun 2015 [7] pry(main)> d.beginning_of_month..d.end_of_month => Mon, 01 Jun 2015..Tue, 30 Jun 2015 [8] pry(main)> d.all_month => Mon, 01 Jun 2015..Tue, 30 Jun 2015
ほかにもall_week
all_quarter
all_year
があります。
4. CSV.foreach
で行数を取得する
たとえば、一行目をスキップしたい場合などに使えます。
require 'csv' CSV.foreach('test.csv') do |csv| next if $. == 1 .... end
5. メソッド呼び出しをスマートに
オブジェクトのプロパティにアクセスする際、nilクラスの場合を考慮して以下のように書くことが多いのですが、
name = user.present? user.name : "名無しさん"
try
を使うともっとスマートに書けます。
name = user.try(:name) || "名無しさん"
6. 値の有無チェックをスマートに
とりわけparams
の値チェックで重宝します。通常はpresent?
で有無をチェックして、存在すればその値を入れますが、
name = params[:name].present? ? params[:name] : "名無しさん"
presence
を使うとスマートに書けます。
name = params[:name].presence || "名無しさん"
7. layoutをある条件で切り替えたい
単純にactionだけで切り替えるのではなく、特定の条件で(たとえばスマートフォンの場合だけ)レイアウトを変更したい場合は以下のようにします。
before_action set_hoge_layout def set_hoge_layout self.class.layout "hoge" if request.mobile end
今回は以上です。またたまってきたらまとめよう。
参考
- hashmap - Reverse a hash in Ruby - Stack Overflow
- Ruby - &&とandの違い - Qiita
- Rails4 - いいねと思った Rails メソッド 10 - Qiita
- Ruby CSV - get current line/row number - Stack Overflow
- Railsエンジニアならこれだけは知っておけっていう便利メソッド - (゚∀゚)o彡 sasata299's blog
- ruby on rails - Only change layout on a certain condition - Stack Overflow