at backyard

Color my life with the chaos of trouble.

逃げ恥、と、RubyやRailsで便利だなと思った書き方の個人的メモ

逃げるは恥だが役に立つ


普段全くテレビは見ないが、最近"逃げるは恥だが役に立つ"だけはよく見ている。

このドラマ、とても日本で受けているようで、Pokémon GO、に続き、
"逃げ恥"現象が日本各地で巻き起こっているのではないだろうか?と勝手に想像している。
私はグーグル日本語入力を使用しているが、"にげ"と入力した時点で"逃げるは恥だが役に立つ"が出てくるので、
これはもう話題沸騰中という形なのではないでしょうか?

さてこのドラマが受ける要素をあげようとしてみると、結構色々と浮かんでくる

1.テンポの良いラブコメで見ていて飽きない

2.登場人物それぞれが抱く信念や葛藤が分かりやすく表現されているし、登場人物のキャラもそれぞれ立っている

3.星野源演じる津崎 平匡は現代を生きる20代〜30代のステレオタイプ的のように見えて、相手との距離のとり方に苦悩する様や、
 相手に判断を委ねて、無意識に責任を負うことを避けようとする、その姿勢が結構リアル(個人的感想)

4.おなじくガッキー演じる"みくり"の(ときに斜め上に)頑張り屋なところや、
 相手との距離感に悩みつつも、それをポシティブに乗り越えようとするたくましさが、これまたリアル(個人的感想)

5.ガッキーやゆりちゃんがかわいい(個人的感想)

というわけで、皆変わり者のように見えつつも
案外、等身大なところが共感を呼んでいるんじゃないかと勝手に感じているのだが、実際はどうなのでしょうか?

頷いてくれる方も、そうじゃねえよと思った方もいるでしょうが、
とりあえずこのダンス見ていれば
"色々世知辛い世の中だけど明日もまあ頑張るか、、、"
そう思える、そんなドラマですね。

youtu.be

Ruby on Rails Tips(個人的メモ)

Railsを1月ほど業務で使い、便利だなと思った書き方を復習がてら書いていく。
なるべくありきたりなものは書かないようにしようと考えているが、
そもそも何がありきたりなのか、まだちゃんと分かっていない感じではある。
(ツッコミ大歓迎です!)

なお使っているRailsのバージョンは5。

パラメータに値が入っているときだけ、検索条件として設定する。

whereで返ってくる型は、ActiveRecord_Relationなので、
これをこのままメソッドチェーンで繋げられるわけですな。

    posts = Micropost.all
    posts = posts.where("user_id >= ?", params[:user_id_from]) if params[:user_id_from].present?
    posts = posts.where("user_id <= ?", params[:user_id_to]) if params[:user_id_to].present?
    posts = posts.where("content LIKE ?", "%#{params[:user_id_from]}%") if params[:content].present?
    posts = posts.where("updated_at >= ? AND updated_at <= ?", params[:updated_at_from], params[:updated_at_to]) if params[:updated_at_from].present? && params[:updated_at_to].present?
    posts = posts.order("user_id ASC")

ファイルパスにファイルが存在しなければtrueを返す

    return true unless File.exists?(file_path)

指定した値が空であれば1を代入する

    params[:number] ||= 1

tryを使った処理の分岐

対象がなければ(この場合"name")nilが返るため、下記のようにして、
"name"が空であるならば、"not_exist_name"を返すことが出来る

    user.try(:name) || "not_exist_name"

DBから取ってきた値をHashにして値に詰める。

この例文だと、普通にActiveRecordを使って書いたほうが良いのだが(※)、
SQL的な感じで書きたいときには便利だなと思った次第。
ちょっと上手い例が浮かんでこなくて、ありきたりなコードとなっている。
(意味が通じにくい文章となっていたので、上記文章、あと下のコードも修正している)

sql = (<<-SQL)
  SELECT user_id, content FROM posts
   WHERE user_id = 1
   ORDER created_at
SQL

posts = Micropost.connection.execute(sql)
posts.each(to_a: :hash) do |post|
  post_content << post
end

ActiveRecordを使った場合。

user1_content = []
posts = Post.where(user_id: 1).order('created_at').select('user_id, content')
posts.each do |post|
  post.content
end

例があまり良くないので、あとで書き直すかもしれない。。。

rails使うとDBの準備が便利すぎた

開発途中にDBの構成が変わったとき、
DBの構成が変わる前のブランチのソースをいじらなきゃいけなくなった。
え、でもDBの構成もう変えちゃったし、変えるとテスト通らないんだよな。。。
と思っていたら、下記コマンドで解決でした。

rails db:drop
rails db:create
rails db:migrate

DB作り直しているだけだけど、
DBテーブルの構成変わる前のブランチなら、migrateファイルも古いままなので、
DB作り直せばいいんだよ、と言われ、あ、なるほど。と思ったわけでした。

Rails便利ですね。
最近のモダンなフレームワークには
大抵こういう仕組みは用意されているものなのかな?

コンソール上からクラスのメソッドを起動したい時

例えばバッチ的な処理とか。

Railsでバッチ的な処理を実装したクラスのメソッドを
コンソール上から叩きたいときは、

    rails runner "Target.test_batch"

という形でコマンドを叩くと、そこで指定したクラスのメソッドを起動してくれる。

追記(2016/11/21)