2016-05-12 5 views
1

バージョンのitem_typeを設定するオプションはありますか?私はクラスPostを持っていて、そのためのデフォルトのitem_typeはPostです。設定するオプションはFooですか?例とPaper Trail Gem:特定のモデルにカスタムitem_typeを使用する方法

UPDATE:

class Post < ActiveRecord::Base 
    has_paper_trail 
end 

post = Post.create # this creates a new post along with a version. 
version = post.versions.first 
version.item_type = 'Post' # Item type here is the name of the base model 'Post'. 
+0

からITEM_TYPEを返し

Someobject.find(1).versions.last 

^:あなたの拡張オブジェクトすなわちからクエリを使用せずにバージョンを取得します。紙トレイルの宝石用です。 –

答えて

-1

あなたはclass_nameオプションをしたいです。これはあなたの例で動作します:

class Post < ActiveRecord::Base 
    has_paper_trail :class_name => 'Foo' 
end 

この意志バージョンPostクラスをFooとして。

詳細はPaper TrailCustom Version Classesセクションのドキュメントを参照してください。

+0

@HaiNguyenこの回答はあなたの質問ですか?その場合は、回答の横にあるチェックマークをクリックして受け入れてください。チェックマークが緑色に変わります。アップホーテもいつでも歓迎です! –

+0

OPの質問は、データベース列 'versions.item_type'に関するものでした。':class_name'を' has_paper_trail'に渡すことは、このデータベース列に影響しません。 –

0

バージョンにitem_typeを設定するオプションはありますか?私はクラスPostを持っていて、そのためのデフォルトのitem_typeはPostです。それがFooであるように設定するオプションはありますか?あなたがhas_paper_trailを呼び出すと

いいえ、それはitemという名前の多型の関連付けを追加します。したがって、PaperTrailはデータベース列を制御しませんitem_type、ActiveRecordはそうします。ここで

has_many協会の定義です:

has_many(
    versions_association_name, # Usually "versions" 
    -> { order(model.timestamp_sort_order) }, # Usually "created_at" 
    class_name: version_class_name, # Usually "PaperTrail::Version" 
    as: :item # Specifies a polymorphic interface 
) 
0

ちょうど今その少し古いを実現、これに出くわしたが、私は同じ要件を持っていたとして、私は私の解決策を共有しようと思いました。これは部分的にしか解決策ですが、それは私がそのようにように、このクラスを使用するために私のモデルのそれぞれを設定しているPaperTrailバージョンのクラスを拡張し、ITEM_TYPEゲッター

class AuditTrail < PaperTrail::Version 
xss_foliate :except => [:object, :object_changes] 

    def item_type 
     if(self[:item_type] == "SomethingIWantToChange") 
      return "Different String" 
     end 

     return self[:item_type] 
    end 
end 

をオーバーライドしている私

作品:

has_paper_trail :class_name => 'AuditTrail' 

は、それから私は、バージョンテーブルを照会することができますし、オーバーライドされたゲッターを介して実行されます返されるオブジェクトとITEM_TYPEは、私が必要となります。

audit_records = AuditTrail.where(someproperty: "something") 

は、これは実際にそれが書かれているDBでそれを変更するが、私はそれはあなたの場合ITEM_TYPEを変更していないというのが私のフロントエンド

ノートに異なり、それを提示する見つけることができる最良の方法ですされませんこれはまだ私がタイトルと記事を更新DB

関連する問題