2012-02-26 15 views
11

मैं एक वर्ग Post नामित किया है:अनुकूलित करने के लिए कैसे रेल 3 एसटीआई स्तंभ नाम

class Post < ActiveRecord::Base 
end 

मैं एक वर्ग Question नामित किया है कि Post से इनहेरिट:

class Question < Post 
end 

और मैं एक वर्ग Answer नाम दिया जो 'पोस्ट' से भी विरासत में है:

class Answer < Post 
end 

Post में, मेरे पास post_type_id नामक एक कॉलम है और इसका 'प्रकार Integer है।
मैं पोस्ट से प्राप्त करने के लिए एसटीआई और विशिष्ट कॉलम नाम & प्रकार का उपयोग कैसे करूं? 0 का अर्थ है Question और 1 का अर्थ Answer है।

+0

http://stackoverflow.com/questions/7134559/rails-use-type-column-without-sti – apneadiving

उत्तर

21

तुम इतनी तरह एकल तालिका भाग स्तंभ का नाम बदल सकते हैं (0 & 1 पदों तालिका में post_type_id का मूल्य है):

class Post < ActiveRecord::Base 
    self.inheritance_column = 'type_column_name' 

end 

हालांकि, वहाँ पूर्णांकों उपयोग करने के लिए रेल पैदा करने के लिए कोई रास्ता नहीं है एक स्ट्रिंग के रूप में वास्तविक प्रकार को संग्रहीत करने के बजाय, जो मुझे लगता है कि यह एकल लक्ष्य विरासत के लिए एक महान उपयोग मामला नहीं हो सकता है। शायद एक गुंजाइश आपको बेहतर तरीके से अनुकूल करेगी:

class Post < ActiveRecord::Base 
    scope :questions, where(:post_type_id => 0) 
    scope :answers, where(:post_type_id => 1) 

end 

@questions = Post.questions.all 
@answers = Post.answers.all 
8

वास्तव में सभी चीजों के साथ एक तरीका है। आप एक पूर्णांक के आधार पर अपने प्रकार को देखने के लिए find_sti_class विधि को ओवरराइड कर सकते हैं।

3

यह हो सकता है कि आप क्या देख रहे हैं।

http://lorefnon.me/2014/07/27/optimizing-sti-columns.html

संपादित करें: अपडेट किया गया URL (धन्यवाद @SubhashChandran)

+0

अपडेट किया गया यूआरएल: http: //lorefnon.me/2014/07/27/optimizing-sti-columns.html –

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