なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2017/07/31)

2017/07/31分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

activerecord/CHANGELOG.md


Merge pull request #29950 from MaxLap/avoid_or_clause_duplicates

activerecord/lib/active_record/relation/where_clause.rbの修正です。

orメソッドで、OR句から共通条件を抽出して、不要なOR句を削減出来るよう修正しています。

例。

class Project < ApplicationRecord
  scope :big, -> { where(big1: true).or(where(big2: true)) }
  scope :important, -> { where(important1: true).or(where(important2: true)) }
end

上記のようなscopeがあった場合、結果が下記のように変わります。

# before
Project.big.important
# => Project Load (0.2ms)  SELECT  "projects".* FROM "projects" WHERE (("projects"."big1" = ? OR "projects"."big2" = ?) AND "projects"."important1" = ? OR ("projects"."big1" = ? OR "projects"."big2" = ?) AND "projects"."important2" = ?) LIMIT ?  [["big1", 1], ["big2", 1], ["important1", 1], ["big1", 1], ["big2", 1], ["important2", 1], ["LIMIT", 11]]


# after
Project.big.important
# => Project Load (0.5ms)  SELECT  "projects".* FROM "projects" WHERE ("projects"."big1" = ? OR "projects"."big2" = ?) AND ("projects"."important1" = ? OR "projects"."important2" = ?) LIMIT ?  [["big1", 1], ["big2", 1], ["important1", 1], ["important2", 1], ["LIMIT", 11]]