記事の作成および更新時に管理者の承認が必要なアプリケーションを作成しています。私はこれを達成するために紙の証跡を使用し、記事への各更新を保存しました。
記事が更新されると、「公開済み」フィールドが false に設定されます。記事の最新の承認済み/公開済みバージョンを表示したいので、記事の現在のバージョンが承認されているかどうかを確認する一種のスコープが必要です。承認されていない場合は、以前のバージョンを検索して、承認/公開されたもの。
def self.published(query={})
where(query).map do |article|
article.published? ? article : article.last_published_version
end.compact! || []
end
def published?()
published
end
def last_published_version()
return self if published?
published_versions = versions.select{ |version| version.reify.try(:published?) }
published_versions.present? ? published_versions.last.reify : nil
end
ここで使用してmap
いるため、クエリは ActiveRecord リレーションではなく配列を返します。公開された記事に対して追加のクエリを連鎖させたいので、これは問題です。
たとえば、やりたいこと:
Article.published.where(...).order_by(...)
など
これを達成するためのアイデアはありますか?