6

तो मेरे पास 2 अलग-अलग मॉडल, टिप्पणियां और उत्तर वाले ऐप हैं, जिनमें से प्रत्येक आप सहमत या असहमत हो सकते हैं, इसलिए मेरे पास इमोशन नामक एक पॉलिमॉर्फिक मॉडल है।पॉलिमॉर्फिक रिश्तों और काउंटर कैश

class Comment < ActiveRecord::Base 
    belongs_to :user 
    has_many :replies 
    has_many :emotions, :as => :emotionable 
end 



class Reply < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :comment 
    has_many :emotions, :as => :emotionable 
end 

class Emotion < ActiveRecord::Base 
    belongs_to :emotionable, :polymorphic => :true 
end 

तो यह सब ठीक काम करता है, लेकिन मैं प्रत्येक के लिए असहमत की इससे सहमत दोनों टिप्पणी के लिए एक काउंटर कैश जोड़ सकते हैं और क्रम में उत्तर दें आकार पाने के लिए की जरूरत है और करने के लिए जा रहा हूँ: यहाँ इन के लिए मेरे कोड है वस्तु। सभी दस्तावेज़ों में, इसमें सामान्य पॉलिमॉर्फिक एसोसिएशन के साथ काउंटर कैश करने के उदाहरण हैं, इसमें कोई अतिरिक्त शर्त नहीं है।

create_table "emotions", :force => true do |t| 
    t.integer "user_id" 
    t.string "emotion" 
    t.integer "emotionable_id" 
    t.string "emotionable_type" 
    t.datetime "created_at",  :null => false 
    t.datetime "updated_at",  :null => false 
end 

टी एल: संदर्भ के लिए, जज्बात के लिए स्कीमा द्वारा इस तरह दिखता है डॉ - मैं फोन करने के लिए @ commet.agrees_count, @ comment.disagrees_count, @ reply.agrees_count और @ reply.disagrees_count एक पर सक्षम होना चाहिए एक काउंटर कैश के माध्यम से polymorphic एसोसिएशन। तो टिप्पणी और उत्तर 2 काउंटर कैश की आवश्यकता होगी।

उत्तर

3

मेरा सुझाव है कि बाद में कॉलबैक में अपने काउंटर कैश को मैन्युअल रूप से बढ़ाएं या घटाएं ताकि आप जांच कर सकें कि रिकॉर्ड जारी रखा गया था और यह लेनदेन के बाहर अपडेट होता है। ऐसा इसलिए है क्योंकि यह आपके कोड को अधिक स्पष्ट और कम रहस्यमय बना देगा कि कैश को कब और कब अपडेट किया गया है या अमान्य किया गया है।

मैन्युअल रूप से कैश को अपडेट करने से आपको अतिरिक्त लचीलापन मिलता है यदि उदाहरण के लिए आप कुछ उपयोगकर्ताओं को अधिक अधिकार देना चाहते हैं, जब वे किसी टिप्पणी (उदा। कर्म प्रणाली) से सहमत हैं या असहमत हैं।

4

आप संबंधित कक्षाओं में attr_readonly सूची में काउंटर कैश विशेषता जोड़ना चाह सकते हैं (उदा। क्लास पोस्ट; attr_readonly: comments_count; end)। http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/belongs_to

:polymorphic 

    Specify this association is a polymorphic association by passing true. 
    Note: If you’ve enabled the counter cache, then you may 
    want to add the counter cache attribute to the attr_readonly list in 
    the associated classes 
    (e.g. class Post; attr_readonly :comments_count; end). 
+0

फिर भी यह मेरे लिए काम नहीं करता – kamal

1

यह बहुरूपी रिश्ते और काउंटर कैश 'में से कोई भी व्यवसाय है, यह, वैसे Multiple counter_cache in Rails model के बारे में

है' बहुरूपी रिश्ते और काउंटर कैश '

class Code < ActiveRecord::Base 
    has_many :notes, :as => :noteable 
end 

class Issue < ActiveRecord::Base 
    has_many :notes, :as => :noteable 
end 

class Note < ActiveRecord::Base 
    belongs_to :noteable, polymorphic: true, count_cache: :noteable_count 
end 

के लिए आपकी तालिका 'मुद्दों' में, आपके पास 'noteable_count' कॉलम होना चाहिए, जैसे आपकी तालिका 'कोड'

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