2017-05-17 4 views
0

以前のバージョンのレコードを検索するためにRailsでフォームを実装しています - PaperTrail gemでバージョン管理を実装しました。フォームにはオブジェクトタイプ(モデル)のドロップダウンメニューが含まれていますので、PaperTrailが含まれているモデル名の配列が必要です(今後変更される可能性がありますので、ハードコードを避けて選択値を入力してください)。残念ながら、私はここまで失敗しました。 PaperTrailのドキュメントで何も見つかりませんでした。#reflect_on_all_associationsが機能していません。Railsアプリに付属しているPaperTrailでモデルを検索する

ご意見をいただければ幸いです。

答えて

1

投稿直後に解決策が見つかりました。私はActiveRecord :: Base(これはRails 5のアプリケーション用のApplicationRecordとなる)の子孫を繰り返し、PaperTrailに含まれるヘルパー関数(つまり:paper_trail.enabled?)ですべてのモデルが継承し、#reduceを使用しました。

ActiveRecord::Base.descendants.reduce([]) do |arr, model| 
    model.paper_trail.enabled? ? arr.push(model.name) : arr 
end 
+1

「子孫」を呼び出す前に、すべてのモデルがロードされていることを確認してください。開発中に、 'Rails.application.eager_load!'を呼び出すことができます。本番環境では、デフォルトで熱心な読み込みが有効になります。 –

関連する問題