मैं प्रत्येक टैग में पोस्ट की संख्या "काउंटर कैश" करने का प्रयास कर रहा हूं। कॉलबैक सहेजने के बाद काम कर रहा है लेकिन नष्ट होने के बाद नहीं है। ऐसा लगता है कि एसक्यूएल को नष्ट करना सही नहीं है।ActiveRecord - has_many: through,: dependent =>: sql को नष्ट करना सही नहीं है
class Post < ActiveRecord::Base
has_many :post_tags, :dependent => :destroy
has_many :tags, :through => :post_tags
end
class Tag < ActiveRecord::Base
has_many :post_tags, :dependent => :destroy
has_many :posts, :through => :post_tags
end
class PostTag < ActiveRecord::Base
self.table_name = :posts_tags
belongs_to :post
belongs_to :tag
after_save :update_tag_posts_count
after_destroy :update_tag_posts_count
def update_tag_posts_count
tag.posts_count = tag.posts.count
tag.save
end
end
परीक्षण विफल रहता है
# @tag.posts_count == 10
Failure/Error: @tag.posts.first.destroy
ActiveRecord::StatementInvalid:
Mysql2::Error: Unknown column 'posts_tags.' in 'where clause': DELETE FROM `posts_tags` WHERE `posts_tags`.`` = NULL
सही एसक्यूएल होना चाहिए
DELETE FROM `posts_tags` WHERE `posts_tags`.`post_id` = {the post id}
table_name = के बजाय set_table_name का उपयोग करने का प्रयास करें? मुझे लगता है कि विधि set_table_name कुछ और चीजें बदलती है। –
@ जो पिम ने काम नहीं किया। इसके अलावा, set_table_name अब बहिष्कृत है। -> अस्वीकरण चेतावनी: कॉल_table_name को कॉल करना बहिष्कृत है। कृपया इसके बजाय 'self.table_name =' the_name'' का उपयोग करें। – Marcelo
मुझे मेरी स्थिति में एक बहुत ही समान त्रुटि मिल रही है। मुझे भी एक जवाब चाहिए। – user1149547