言われてみればあたり前田のクラッカーだが得心するまで微妙にどっちだったか?と考えてしまうことが何度かあったので備忘録として残しておく。
わかりにくいこと、わかったが忘れそうなことのメモ置き場として適宜更新追加していく予定。
rails、基本的に便利なのだけどいろいろな書き方ができるのでわかったときは「なるほど!」となるがしばらくして「確かこういうケースのときはもっとRails Wayな書き方があったけどどうやるんだっけ?」みたいなことが起こりがち。
慣れてしまえばいいんだけど他言語から入ってきた勢としてはなかなかスイッチングコストが大きい。
あとタイトルでrubistと書いてるがほぼrailsの話し。
モデルは単数形、belongs_toは単数形、has_manyは複数形
モデルは単数形(Railsの思想的な問題?)
belongs_toなど対象が単数であることが自明なら単数、has_manyのようにモデルだが複数所有するケースは複数形になる。
belongs_to :item
has_many :items
言われてみればまあそうだなって話しなんだけど最初は「こっちは単数形だけどこっちは複数形…え?どういうこと???」ってなった。
validateでハマったところ。
validates :name, length: {in: 1..10_00_00}
みたいな実装があり、これがエラーにならなくて「どう解釈されているのか?」と思ってたがrubyではこの実装をしてもエラーにはならない。
理由は数字の連結を行っていると解釈されるため。
つまり1..100000
と1..10_00_00
は等価。
元々はお金とか数字が大きい際の区切り文字として入れておくことで人間に優しくなるということだと思うのだけど使ってる場所が悪く理解するのに時間がかかった。
なお問題の箇所で使われていた_
はただのタイポだった。
三項演算子よりもrails wayな実装
before:
result = rows.present? ? rows : "エラーメッセージとか空配列とか指定するよ"
after:
result = rows.presence || "エラーメッセージとか空配列とか指定するよ"
present?
はtrue
/false
を返すがpresence
は成功なら自身を返す。
この場合はrows
が返り、失敗するとfalse
が返る。
そしてRubyの構文で[A] || [B]
を使用しているため、Aがtrue
でなければBを返す…という実装になっている。
そういえば最初の頃は[A] || [B]
という書き方になれなかったが最近だいぶ考えずにすっと読めるようになってきた。
似た書き方にresult ||= "デフォルト値だよ"
とかもある。
こういうの地味にググりにくく困ることがある。