has_many :entry_states という Entry というモデルがあります。EntryState には、:read という属性があります。
entry_state があるかどうかに関係なくすべてのエントリを取得したいので、LEFT OUTER JOIN がコーディング ホラーの左外部結合を見るのに最適な方法だと思います
ただし、結果に EntryState の属性も含めたいと思います。だから私は次のようなクエリを持っています:
entries = Entry.select('entries.*, entry_states.read').
joins("LEFT OUTER JOIN entry_states ON entries.id = entry_states.entry_id AND entry_states.user_id = #{user_id}")
これに関する問題は、この後 entry_states オブジェクトが利用できないことです。
次のような読み取り状態を取得できます。
entries.first.read
>> t
生の列の値が得られますが、これはブール列であるため、元に戻すtrue
か、false
EntryState オブジェクト全体を取得できればさらに良いでしょう。.includes(:entry_state) を使用してみましたが、の外部結合条件を含める方法が見つかりませんでしたAND entry_states.user_id = #{user_id}