Rails

ActiveRecord で unscoped を呼ぶとその前のクエリが消える

久々ですこんにちは。 毎日ブログを書くとはなんだったのか…。 そろそろアウトプットしたいな〜〜〜と思い始めてきたのでぼちぼち書いていきたい…。 unscoped を使うことで default_scope を取り除くことができる さて、皆さん大好き default_scope ですが、…

Omotesando.rb #54 で『ActiveRecord のコードを読んでみる』をしてきた

Omotesando.rb #54 で LT してきました。 今回は「コードの読み方」というテーマだったせいかいつもよりもめっちゃ人が集まっていましたねー。人が多いけど懇親会でぼっちだったワイ やっぱり「コードの読み方」っていうのは初心者から上級者まで興味がある…

ActiveRecord で実行される sql を確認する

ActiveRecord で実行される sql を確認したい場合、 #to_sql メソッドが利用できます。 # このリレーションでレコードを読み込む場合に実行される SQL を文字列で取得する p Blog.joins(:articles).where(articles: { name: "hoge" }).to_sql # => "SELECT \…

ActiveSupport::TimeWithZone#+ に数値を渡したときの挙動

ActiveSupport::TimeWithZone#+ に値を渡すと『渡した時間を加算した時刻』を返します。 # 現在の時刻 current_time = Time.current pp current_time # => Mon, 06 Jan 2020 20:10:15 JST +09:00 # + 1日 pp current_time + 1.days # => Tue, 07 Jan 2020 20…

【Ruby on Rails Advent Calendar 2019】ActiveRecord で後から where クエリを上書きする【2日目】

Ruby on Rails Advent Calendar 2019 2日目の記事になります。 今回は最近ハマっているクエリメソッド付けたり外したりしていることを簡単に書いてみようかと思います。 サンプルモデル 今回は以下のような scope を定義したモデルを例として説明していきた…

Rails の touch 時に処理をフックする

任意のレコードの updated_at のみを更新する際に ActiveRecord の #touch を使うことはあると思います。 class User < ActiveRecord::Base end user = User.create(name: "Homu") pp user.updated_at.iso8601(10) # => "2019-02-18T12:36:37.2315494900Z" #…