クエリ

参考:

Active Record クエリインターフェイス | Rails ガイド [公式]

ActiveRecord::QueryMethods | Ruby on Rails API [Official]

使い方

参考:

Rails で条件検索 – Qiita

Rails のモデル検索あれこれ – Qiita

クエリメソッドをまとめてみた – Qiita

クエリの基本 | そういうことだったんですね

find、find_by、where などモデルを取得する方法まとめ | Ruby on Rails 始めました

Rails で ActiveRecord / Arel を使って複雑な SELECT 文を実行する方法 | Rails Webook

rails で効率的なクエリを作るための tips 5選 – Qiita

all

スコープ内の全てのオブジェクトを表すリレーションを返す。default_scope が定義されている場合は、デフォルトスコープ内の全てのオブジェクトを表すリレーションを返す。

参考:

all – ActiveRecord::Scoping::Named::ClassMethods | Ruby on Rails API [Official]

all – rails/named.rb at v5.2.3 · rails/rails – GitHub

current_scope – rails/scoping.rb at v5.2.3 · rails/rails – GitHub

reverse_order

レコードを逆順で取得する。

User.all.reverse_order

参考:

あれっ? 降順って ASC? DESC?そんな時は、reverse_order を使ってみましょう!- Qiita

reverse_order (ActiveRecord::QueryMethods) – APIdock

reverse_order – ActiveRecord::QueryMethods | Ruby on Rails API [Official]

order

参考:

rails で Model から引っこ抜いたデータの並び順を変える Order の使い方を極める – Qiita

order | Railsドキュメント (railsdoc.com)

order – ActiveRecord::QueryMethods | Ruby on Rails API [Official]

where

参考:

Rails で条件検索 – Qiita

where で複数条件検索 – Qiita

where – ActiveRecord::QueryMethods | Ruby on Rails API [Official]

where | Railsドキュメント (railsdoc.com)

以下のような SQL を rails 上で実現したい | teratail

where – rails/query_methods.rb at v6.0.0.rc1 · rails/rails – GitHub

where で配列を使う

参考:

ActiveRecord で IN 句 – Qiita

配列で表された条件 | Rails ガイド [公式]

How to select where ID in Array Rails ActiveRecord without exception – Stack Overflow

where.not

参考:

Rails で where.not を複数連結する場合 – Qiita

ActiveRecord’s where.not | thoughtbot

How do I exclude search results in ActiveRecord? – Stack Overflow

Exclude active record set from another recordset? – Stack Overflow

where における or

参考:

Rails の model で WHERE カラム名 IN [配列] OR カラム名 IN [配列] 検索するメソッドの書き方 – Qiita

where で複数カラムの OR 条件を作成する | 酒と涙とRubyとRailsと

ActiveRecord::Relation を結合する – Qiita

or – ActiveRecord::QueryMethods | Ruby on Rails API [Official]

id で指定した順序でレコードを取得する

参考:

ActiveRecord で、where で指定した順番通りに結果をソートしたい時どうするか | 日々雑記 (y-yagi.tumblr.com)

How to select database records in an arbitrary order | Justin Weiss

rails の where 句の結果を指定の順番で取り出す方法は? – スタック・オーバーフロー

includes / joins

includes
N+1 問題を避けるために、必要な関連レコードをまとめてクエリする。
joins
関連するモデルの条件で絞り込みを行えるように INNER JOIN を実行する。JOIN して条件を絞り込みたいが、JOIN するテーブルのデータを使わない場合に使う。

参考:

似ているようで全然違う!? Activerecord における includes と joins の振る舞いまとめ – Qiita

INNER JOIN で eager loading – Qiita

ActiveRecord の joins と preload と includes と eager_load の違い – Qiita

関連付けを一括読み込みする | Rails ガイド [公式]

includes – ActiveRecord::QueryMethods | Ruby on Rails API [Official]

joins – ActiveRecord::QueryMethods | Ruby on Rails API [Official]

関連モデルの where で条件を絞り込む

ユーザーがアカウントと関連付けられている場合に、joinsmerge を使ってアカウントの active カラムが true であるユーザーを選択する。

User.joins(:account).merge(Account.where(active: true))

参考:

関連するモデルの条件で検索したい – Qiita

Rails でアソシエーションされたモデルを条件にして検索する | Workabroad.jp

Rails で複数テーブルの joins/includes と where 検索 | EasyRamble

ActiveRecord の merge は使える子 | mah365

merge – ActiveRecord::SpawnMethods | Ruby on Rails API [Official]

Rails where() clause on model association? – Stack Overflow

merge

参考:

ActiveRecord の merge は使える子 | mah365

merge メソッド使ってます? – Qiita

ActiveRecord の merge メソッドについて | nakaearth の日記

merge – ActiveRecord::SpawnMethods | Ruby on Rails API [Official]

関連付けに条件を付ける

参考:

has_many で関連元のオブジェクトに依存した条件を付けたいとき | falcon’s diary

サブクエリ

参考:

ActiveRecord でサブクエリ (副問い合わせ) と内部結合 – Qiita

SQL でサブクエリを使う | スーパーソフトウエア東京

How i can write a query inside select in rails – Stack Overflow

reset / reload

リレーションをリセットしてクエリを再実行する。

@posts = Post.all
@posts.to_a
# => Post Load (0.2ms) SELECT "posts".* FROM "posts"
@posts.to_a
# Reuse cached objects (without executing query)
@posts.reset.to_a
# => Post Load (0.2ms) SELECT "posts".* FROM "posts"

ユーザーが独自に設定したインスタンス変数はリセットされないので注意。独自に管理する変数をリセットしたい場合はリレーションを拡張して reset メソッドをオーバーライドする。

参考:

ActiveRecord::Base#reload の使い方 | 珈琲駆動開発

ActiveRecord::Base#reload はインスタンス変数をクリアしない | アクトインディ開発者ブログ

reload | Railsドキュメント (railsdoc.com)

reset – ActiveRecord::Relation | Ruby on Rails API [Official]

reload – ActiveRecord::Relation | Ruby on Rails API [Official]

ActiveRecord::Base.reload() reading from QueryCache instead of from DB · Issue #17131 · rails/rails – GitHub

How can I know when to “refresh” my model object in Rails? – Stack Overflow

scoping

参考:

scoping – ActiveRecord::Relation | Ruby on Rails API [Official]

select

指定したカラムを取得する。AS 句により別名を付けることができる。

参考:

モデルから特定のカラムのみ取得 – Qiita

select – ActiveRecord::QueryMethods | Ruby on Rails API [Official]

AS 句

参考:

カラム名を別名で返したい場合は素直に AS 句を使った方が良いかも 1000件で 380ms 速くなった – Qiita

select alias dosn’t work · Issue #12119 · rails/rails – GitHub

ActiveRecord query alias field name output – Stack Overflow

pluck

参考:

クエリメソッドの select と pluck の違い – GitHub Gist

pluck – ActiveRecord::Calculations | Ruby on Rails API [Official]

ids

参考:

ids – ActiveRecord::Calculations | Ruby on Rails API [Official]

count

参考:

size と count と length について | ゆっくりブログ

ActiveRecord の has_many アソシエーションで個数を取得する (size, count, length) | 訳も知らないで

count – ActiveRecord::Calculations | Ruby on Rails API [Official]

count – ActiveRecord::Associations::CollectionProxy | Ruby on Rails API [Official]

IS NULL / IS NOT NULL の書き方

参考:

Where 句に NOT NULL を指定する – Qiita

多段ネストで  joins する

参考:

Rails で joins を多段ネストする方法 (親から曾孫まで) – Qiita

複数テーブルにまたがる検索 (先読み、JOIN など) – Qiita

Rails でモデルを4段階 join する方法で、もう一度理解する joins と merge – Qiita

union

  • UNION
  • UNION ALL

参考:

ActiveRecord 4.2以上で union する方法 – Qiita

複数の scope の結果をひとつにまとめる方法は? | スタック・オーバーフロー

[wip] Support UNION [ALL] by fatkodima · Pull Request #31658 · rails/rails – GitHub

Fix: Arel now emits a single pair of parens for UNION and UNION ALL by kbrock · Pull Request #34437 · rails/rails – GitHub

ActiveRecord UNION left out · Issue #939 · rails/rails – GitHub

use union all in rails – Stack Overflow

none

参考:

none – ActiveRecord::QueryMethods | Ruby on Rails API [Official]

Returning an empty ActiveRecord scope | makandra dev

How to return an empty ActiveRecord relation? – Stack Overflow

to_sql

参考:

to_sql – ActiveRecord::Relation | Ruby on Rails API [Official]

How can I see the SQL that will be generated by a given ActiveRecord query in Ruby on Rails – Stack Overflow

SQL を整形する

参考:

Rails のログに出力されるパラメータや SQL を整形する | ゆるよろ日記

Pretty Print SQL in Ruby – Stack Overflow

ActiveRecord::Base

参考:

rails/base.rb at v6.0.0.rc1 · rails/rails – GitHub

ActiveRecord::QueryMethods

参考:

rails/query_methods.rb at v6.0.0.rc1 · rails/rails – GitHub

ActiveRecord::Querying

参考:

rails/querying.rb at v6.0.0.rc1 · rails/rails – GitHub

ActiveRecord::ConnectionAdapters::Quoting

参考:

ActiveRecord::ConnectionAdapters::Quoting | Ruby on Rails API [Official]

rails/quoting.rb at 5-2-stable · rails/rails – GitHub

UNIQUE constraint failed エラー

参考:

SQLite3 での UNIQUE 制約 | au の日記

Sqlite で既に存在するかもしれない primary key を持つ複数 vales を一括 insert | grachro のブログ

SQLite UNIQUE Constraint | SQLite Tutorial (sqlitetutorial.net)

Activerecord の更新のメソッドを使っているのに、id が unique ではない YO と出る。 – スタック・オーバーフロー

SQLite3 UNIQUE constraint failed error – Stack Overflow

update method of ActiveRecord failed because UNIQUE constraint failed: items.id – Stack Overflow

row value misused エラー

参考:

“row value misused” error – Stack Overflow

PpSql

参考:

kvokka/pp_sql: Rails ActiveRecord SQL queries log beautifier – GitHub

anbt-sql-formatter

参考:

sonota88/anbt-sql-formatter: A tool for SQL formatting written in Ruby – GitHub

Niceql

参考:

alekseyl/niceql: niceql gem repo. Nice, colorized SQL formatting in ruby – GitHub

ActiveRecordUnion

参考:

brianhempel/active_record_union: UNIONs in ActiveRecord! Adds proper union and union_all methods to ActiveRecord::Relation – GitHub

Active Record でシンプルに union を実現する | 東京ブルーライトえんじにあ

active-record-query-trace

クエリがどこから呼び出されたかわかるようにバックトレースをログに出力する。

参考:

brunofacca/active-record-query-trace: Rails plugin that logs/displays a backtrace of all SQL queries executed by Active Record – GitHub

OrderAsSpecified

参考:

panorama-ed/order_as_specified: Add arbitrary ordering to ActiveRecord queries – GitHub

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です