14

यह व्यक्त करने के लिए कि समूह में एकाधिक उपयोगकर्ता हो सकते हैं, और उपयोगकर्ता एकाधिक समूहों से संबंधित हो सकता है , मैं निम्नलिखित संघों सेट:रेल: क्यों "has_many ...,: through => ..." एसोसिएशन के परिणाम "NameError: uninitialized निरंतर ..."

class Group < ActiveRecord::Base 
    has_many :users_groups 
    has_many :users, :through => :users_groups 
end 

class User < ActiveRecord::Base 
    has_many :users_groups 
    has_many :groups, :through => :users_groups 
end 

class UsersGroups < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :group 
end 

हालांकि, जब मैं टाइप करें:

Group.find(1).users 

मैं:

NameError: uninitialized constant Group::UsersGroup 

मैं क्या कर रहा हूँ गलत ?

उत्तर

29

class UsersGroupsclass UsersGroup होना चाहिए। ActiveRecord मॉडल एकवचन हैं - टेबल बहुवचन हैं।

+0

धन्यवाद! यह 'उपयोगकर्ता समूह' नामक मॉडल रखने के लिए मेरे लिए अजीब/गलत लग रहा है। मैं नहीं चाहता कि उनमें से एक बहुवचन और दूसरा एकवचन हो। शायद मुझे मॉडल समूह का नाम बदलना चाहिए जैसे कि UserGroupPair, ताकि तालिका का नाम 'user_group_pairs' होगा। तुम क्या सोचते हो ? –

+1

जब आप एक मॉडल में शामिल होते हैं, तो मानक अभ्यास एक शब्द के साथ आना है जो एसोसिएशन का वर्णन करता है। उदाहरण के लिए, समूह सदस्यता या कुछ। बस जांचने के लिए, क्या आप वाकई एक मॉडल में शामिल होने की ज़रूरत है? यदि जुड़ने के लिए तर्क की आवश्यकता नहीं है तो आप केवल एक टेबल से दूर हो सकते हैं। – Skilldrick

+0

क्या आपका मतलब मॉडल नाम 'समूहमेम्बरशिप' और तालिका का नाम 'group_membership' है, यानी दोनों एकवचन? मुझे यकीन नहीं है कि मैं शामिल तालिका से छुटकारा पाने के बारे में आपका दूसरा बिंदु समझ गया हूं। क्या आप थोड़ा सा विस्तार कर सकते हैं? –

1

ActiveRecord नाम को एकवचन करने का प्रयास करता है, लेकिन आपकी कक्षा वास्तव में UserGroups नामित है। इसे UserGroup पर पुनर्नामित करें। मॉडल एकवचन हैं।

1

मुझे लगता है कि वर्ग UserGroups के परिवर्तन नाम

-1

usergroup के अलावा, कृपया ध्यान दें कि मॉडल के फ़ाइल नाम भी विलक्षण रूप में होना चाहिए। इस मामले में, app/models/user_group.rb

+1

हमेशा नहीं। इस विशेष मामले में यह ठीक है। –