मैंने आपके जैसा ही परिदृश्य का अनुकरण किया और पता लगाया:
जब भी किसी मॉडल (पोस्ट) में has_many through
. होता है एसोसिएशन तो उस मॉडल का एक उदाहरण बनाने पर, Post
Hash
पास करना उदाहरण के लिए:Post.new( JSON.parse(json) )
या Post.new(id: 113)
ऐसा लगता है जैसे रेल उनके साथ अलग व्यवहार करते हैं, हालांकि वे एक ही रिकॉर्ड की ओर इशारा कर रहे हैं।
मैंने नीचे दिए गए क्रम में निम्नलिखित कमांड चलाए:
p = Post.last
p.tags
p.tags.count
json = p.to_json
p2 = Post.new( JSON.parse(json) )
p2.tags
p2.tags.count ## Gives incorrect count
p3 = Post.find(JSON.parse(json)["id"]) ### See notes below
p3.tags
p3.tags.count ## Gives the correct count
सीधे हैश का उपयोग करके पोस्ट का एक नया उदाहरण बनाने के बजाय, मैंने id
का उपयोग करके डेटाबेस से रिकॉर्ड प्राप्त किया जेसन को deserializing से प्राप्त किया। इस मामले में, उदाहरण p3
और उदाहरण p2
एक ही पोस्ट का संदर्भ लें लेकिन रेल उन्हें अलग तरह से व्याख्या कर रहे हैं।