5

मैं अटक गया हूं। मैं पैपर्ट्राइल वाले मॉडल पर एसोसिएशन परिवर्तन (has_many, has_many through) को शामिल करने का तरीका जानने का प्रयास कर रहा हूं। मैं MyModel.versions.first.changeset पर कॉल करना चाहता हूं और संबंधित वस्तुओं पर होने वाले किसी भी बदलाव को .changeset हैश में ऑब्जेक्ट के उस संस्करण से वापस किया गया है।रेल/पैपर्ट्राइल: एसोसिएशन के साथ परिवर्तन

मैं संस्करण संघों के लिए माइग्रेशन जोड़ दिया है:

class CreateVersionAssociations < ActiveRecord::Migration 
    def self.up 
    create_table :version_associations do |t| 
     t.integer :version_id 
     t.string :foreign_key_name, :null => false 
     t.integer :foreign_key_id 
    end 
    add_index :version_associations, [:version_id] 
    add_index :version_associations, [:foreign_key_name, :foreign_key_id], :name => 'index_version_associations_on_foreign_key' 
    end 

    def self.down 
    remove_index :version_associations, [:version_id] 
    remove_index :version_associations, :name => 'index_version_associations_on_foreign_key' 
    drop_table :version_associations 
    end 
end 


class AddTransactionIdColumnToVersions < ActiveRecord::Migration 
    def self.up 
    add_column :versions, :transaction_id, :integer 
    add_index :versions, [:transaction_id] 
    end 

    def self.down 
    remove_index :versions, [:transaction_id] 
    remove_column :versions, :transaction_id 
    end 
end 

मैं संबद्ध वस्तुओं के लिए Papertrail को शामिल किया है, लेकिन जहाँ तक मैं बता सकता हूँ, वहाँ पुन: प्राप्त करने परिवर्तन है कि को हुई थी पर चर्चा नहीं प्रलेखन है संबंधित वस्तुओं। क्या कोई इस बात पर सहायता कर सकता है कि क्या यह पेपरट्राइल का उपयोग कर संभव है?

मैं एक मॉडल और उसके संबंधित ऑब्जेक्ट्स पर बदलावों के ऑडिट ट्रेल को कार्यान्वित करने की कोशिश कर रहा हूं जिसे एक परिवर्तन में एक्सेस किया जा सकता है।

+0

मुझे लगता है कि मैं एक समान सुविधा की तलाश में हूं। मैं 'has_many' ऑब्जेक्ट पर' belong_to' परिवर्तन रिकॉर्ड करना चाहता हूं। जैसे, यदि किसी व्यक्ति के पास 'फ़ोन नंबर' है और आप किसी व्यक्ति संख्या को बदल/जोड़/हटाते हैं, तो यह उस रिकॉर्ड को रिकॉर्ड करेगा जो _person_ में परिवर्तन के रूप में रिकॉर्ड करता है, इसे फ़ोन नंबर में बदलाव के रूप में रिकॉर्ड नहीं करता है। – Luke

+0

@ ल्यूक हाँ मैंने इसे थोड़ी देर पहले कोशिश की, लेकिन ऐसा नहीं लगता कि इस तरह के assocaition ट्रैकिंग ने इसे पूरी तरह से पैपरट्राइल में बनाया है, कुछ कठिनाइयों का वर्णन करने वाला एक पुराना टिकट है, वे भविष्य के संस्करण के लिए इस पर काम कर रहे हैं, मैं थोड़ी देर में इसे हर बार एक नजर रखें https://github.com/airblade/paper_trail/issues/503 – heinztomato

उत्तर

-1

ऐसा लगता है कि इस papertrail मणि

बाहर की जांच यहां https://github.com/airblade/paper_trail/blob/v4.2.0/README.md#associations

डॉक्स papertrail का ट्रैक रखने के लिए यह परिवर्तन एक नया डेटाबेस तालिका के अलावा की आवश्यकता होगी करने के लिए एक प्रायोगिक सुविधा के रूप में जोड़ दिया गया है संबंधित मॉडल।

0

आपको जो जानकारी चाहिए वह अंततः प्रासंगिक तालिका versions और version_associations में संग्रहीत है।

हालांकि, paper_trail आपके इच्छित तरीके से जानकारी तक पहुंचने के तरीकों को प्रदान नहीं करता है। लेकिन आप ऑब्जेक्ट के एसोसिएशन के संस्करणों की सूची प्राप्त करने के लिए स्वयं को एक कस्टम विधि लिख सकते हैं।

मान लीजिए कि आप निम्नलिखित मॉडल हैं:

PaperTrail::Version.where(item_type: 'Comment') 
        .joins(:version_associations) 
        .where(version_associations: { foreign_key_name: 'article_id', foreign_key_id: article.id }) 
        .order('versions.created_at desc') 

आप बंदर मणि पैच सकते हैं, या निर्धारित किए हैं:

class Article < ApplicationRecord 
    has_many :comments 
    has_paper_trail 
end 

class Comment < ApplicationRecord 
    belongs_to :article 
    has_paper_trail 
end 

आप एक लेख वस्तु article इस तरह के सभी टिप्पणी संस्करणों पा सकते हैं इस विधि को अनुच्छेद वर्ग पर एक उदाहरण विधि के रूप में, ताकि आप इसे आसानी से कॉल कर सकें, उदाहरण के लिए article.comment_versions

नोट, उपर्युक्त जानकारी article.versions.first.changeset में एयनियन उपलब्ध नहीं है, क्योंकि यदि आप कोई टिप्पणी बदलते हैं लेकिन लेख नहीं, तो लेख संस्करण नहीं है, केवल टिप्पणी है।

लेकिन ऊपर दी गई विधि आपको संघों में परिवर्तनों के इतिहास तक पहुंचने की अनुमति देती है।

संबंधित मुद्दे