2011-03-15 12 views
6

मैं है एक रेल अनुप्रयोग के भीतर निम्नलिखित मॉडल:Mongoid में दस्तावेज़ का _type कैसे बदलें?

class User 
    include Mongoid::Document 
    ... 
end 

class Admin < User 
    ... 
end 

मैं एक उपयोगकर्ता मिलती है:

u = User.find(some_key) 

और _type बदलने की कोशिश:

u._type # => "User" 
u._type = "Admin" 
u.save 
u._type # => "Admin" 

लेकिन अगर मैं फिर से लोड ऑब्जेक्ट यह अभी भी एक उपयोगकर्ता है:

u.reload 
u._type = "User" 

यह बदलने के लिए सही तरीका क्या है?

+0

इसका मेरे लिए ठीक काम कर रहा (प्रकार स्तंभ के साथ)। '_type' – Ashish

+0

@ ऐशिश के बजाय 'टाइप' फ़ील्ड के साथ आज़माएं @ एशिश यहां काम नहीं करता है: u.type # => NoMethodError: # <उपयोगकर्ता: 0x00000104eaf510> –

+0

के लिए अपरिभाषित विधि 'प्रकार' u.write_attribute ('_ type', 'व्यवस्थापक')। और इसके अलावा, शायद आपकी बचत विफल (सत्यापन, आदि)। बचाने की कोशिश करो! – Roman

उत्तर

6

एक कच्चे MongoDB क्वेरी का उपयोग करके इसे सुलझाने समाप्त हुई:

users.update({ :"_id" => user.id }, { :"$set" => { :"_type" => "Admin" }}) 
+0

मैंगॉयड के साथ कच्ची क्वेरी कैसे चलाएं? :) – gucki

7

आप भी mongoid साथ रहने के लिए Model#update_attribute इस्तेमाल कर सकते हैं:

user.update_attribute(:_type, "Admin") 
संबंधित मुद्दे