スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Railsで論理削除したレコードを見ない方法

deleted_atというTIMESTAMPTZなカラムに日付が入っている場合は削除済み、NULLの場合は有効という論理削除を考えます。
projectsとimagesというテーブルがあり、1対Nの関係があります。

1. 有効なレコードを検索する
Project.all
してしまうと論理削除されたレコードまで取れます。
そこでこうします。
Project.where('deleted_at IS NULL').all

2. has_manyで取得する
has_manyもそのままだとダメなので条件を追加します。

def Project < ActiveRecord::Base
has_many :images, ->{where("#{Image.table_name}.deleted_at IS NULL")}
end


3. deviseでも論理削除対応
モデルクラスに以下を追加

def self.find_first_by_auth_conditions(warden_conditions)
where(warden_conditions).where('deleted_at IS NULL').first
end
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。