Augmented Usamimi

it { is_expected.to be_blog.written_by(izumin5210) }

【Rails】JOINするscopeを書く

同一のJOINを複数のscopeやメソッド,コンテキストで使用する場合, それ自体をscopeとして定義しておくとちょっとDRYになる.

scope :join_before_date_period, -> do
  before = Event.arel_table.alias('before_event')
  joins(
    arel_table.join(before, Arel::Nodes::OuterJoin)
      .on(before[:id].eq arel_table[:before_event_id]).join_sources
  )
end

同じalias貼ったarel_tableを使いまわす場合はメソッドに切り出すといいのかな?

scope :join_before_date_period, -> do
  before = before_event_arel_table
  joins(
    arel_table.join(before, Arel::Nodes::OuterJoin)
      .on(before[:id].eq arel_table[:before_event_id]).join_sources
  )
end

def before_event_arel_table
  Event.arel_table.alias('before_event')
end

SQL力とArel力,あげていこうな.