SakuraWi - BLog

WEBエンジニア。聴いたお話をまとめておく倉庫的な。スタックストックスタック!

Active Record クエリインターフェイスを読む【Rails Guides】


さてさて、Active Record クエリインターフェイスを読んで行きます。

あ、これ知らなかったなーなんていうことをまとめておきます。

.first(3)

とすると3つとれる。 なんだってー

バッチ

プログラムの一連の流れ あらかじめ決めておいた処理のまとまりのようなもの

scope

category.articles.published の、publishedの部分のこれ。 これができるようにするためのもの

class Article < ApplicationRecord
  scope :published, -> { where(published: true) }
end

と書く!! メソッドのようなものだが、スコープとして定めておくと、クエリが発行されて

class Article < ApplicationRecord
  def self.published
    where(published: true)
  end
end

と書いたことと同義になる。

スコープは自由に定義することが可能、ということですな。

ただし1つ注意点があります。それは条件文を評価した結果がfalseになった場合であっても、スコープは常にActiveRecord::Relationオブジェクトを返すという点です。クラスメソッドの場合はnilを返すので、この振る舞いが異なります。したがって、条件文を使ってクラスメソッドを連鎖させていて、かつ、条件文のいずれかがfalseを返す場合、NoMethodErrorを発生することがあります。

これは注意が必要そう。

15 動的検索

実は動的にメソッドが作られていた。 find_by_method のような形。

18 sqlで検索

find_by_sql

18.2 pluck

モデルから、必要なidだけとりたいとかnameを引っ張りたい時に便利

Client.select(:id).map(&:id)といった記述をしなくてもOK

19 オブジェクトの存在チェック

Client.exists?(id: [1,2,3])という感じ