2

記事の作成および更新時に管理者の承認が必要なアプリケーションを作成しています。私はこれを達成するために紙の証跡を使用し、記事への各更新を保存しました。

記事が更新されると、「公開済み」フィールドが 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(...)など

これを達成するためのアイデアはありますか?

4

2 に答える 2

1

joinsバージョン管理テーブルに対して検索語を追加できるように、直接関連付けと 2 つを一緒に作成することをお勧めします。また、カスタム バージョン クラスを使用し (デフォルトのバージョン テーブルでこれを行うことができないわけではありません)、定期的にアクセスする (または検索のためにアクセスする必要がある) メタ データを設定します。metaオプション。この方法の方がおそらく高速で、データの検索/アクセスがより便利になります。

于 2013-02-10T03:13:21.320 に答える