ホーム DoRuby arel_tableを使った時のメモ

arel_tableを使った時のメモ

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

日々の気温差に体がついて行っていない気がする中西です。

少し前にarel_tableを使用したので、簡単な使い方等をメモしてみます。

複雑なSQL文

スコープなどを書こうと思った場合に、条件がすこし難しい場合があります。

そういった時に、生のSQL文を使用することもあると思います。

少し前に、下記のようなスコープを書いたとこがありました。

scope :except_codes, -> { where.not('(test_code = 0 OR test_code IS NULL) AND code_created_at IS NULL') }

生のSQL文をを用いています。

そのとき、先輩からarel_tableの話を聞き使ってみることにしました。

使ってみた結果が、下記になります。

scope :except_codes, -> { where.not(arel_table[:test_code].eq_any([0, nil]).and(arel_table[:code_created_at].eq(nil))) }

今回は、短いSQL文ですが、長いSQL文になった場合、生のSQL文では後々わかりずらくなってしまう恐れがあります。

そういった場合に、arel_tableを使うことで後々理解がしやすくなると思われます。

arel_tableの使い方

今回上記で使用した部分について簡単にメモします。

まず、下記部分で使用するカラム名を指定しています。

arel_table[:test_code]
arel_table[:code_created_at]

このあとに、条件を追加します。

それぞれ、今回使用している部分は下記のような意味となります。

eq_any(○) :○以外の場合(≠)
eq(○)   :○の場合(=)

○の部分が複数ある場合、配列として入力することで複数の値を条件にできます。

a.eq([0, 1]) :aが「0」か「1」の場合

複数の条件を組み合わせたい場合には、andやorを用いることができます。

こうすることで、複雑な条件文の場合にも比較的簡単に書くことができます。

まとめ

今回は実際に自分が使用した、簡単な部分についてメモしてみました。

このほかにも、likeやorder等も簡単に書けるようです。

気になる方が、調べてみてください。

追記(2016/2/2)

ちょっと指摘があったので追記。

今回紹介しているarel_tableは、Rails用の非公開APIなので、使用する場合は、それを念頭に置き、注意してください。

記事を共有
モバイルバージョンを終了