2016-09-22 6 views
7

मैं रेल के साथ रेल 5 एपीआई का उपयोग कर रहा हूं। मेरे पास User मॉडल है। स्कीमा इस तरह दिखता है।रेल 5 मॉडल ऑब्जेक्ट्स सभी डेविस विशेषताओं को प्रदर्शित नहीं कर रहे हैं

create_table "users", force: :cascade do |t| 
    t.string "email",     default: "", null: false 
    t.string "encrypted_password",  default: "", null: false 
    t.string "reset_password_token" 
    t.datetime "reset_password_sent_at" 
    t.datetime "remember_created_at" 
    t.integer "sign_in_count",   default: 0, null: false 
    t.datetime "current_sign_in_at" 
    t.datetime "last_sign_in_at" 
    t.inet  "current_sign_in_ip" 
    t.inet  "last_sign_in_ip" 
    t.datetime "created_at",       null: false 
    t.datetime "updated_at",       null: false 
    t.index ["email"], name: "index_users_on_email", unique: true, using: :btree 
    t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree 
    end 

लेकिन मुद्दा मैं कर रहा हूँ रेल केवल मॉडल के भाग के रूप :id , :email , :created_at , :updated_at गुण दिखा है। उदाहरण के लिए, रेल कंसोल

User.new 
=> #<User id: nil, email: "", created_at: nil, updated_at: nil> 

User.first 
    User Load (0.5ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT $1 [["LIMIT", 1]] 
=> #<User id: 2, email: "[email protected]", created_at: "2016-09-22 03:58:04", updated_at: "2016-09-22 04:54:41"> 

लेकिन ये गुण डेटाबेस में मौजूद हैं। इस समस्या का पहले उल्लेख किया गया है। Devise with rails 5। लेकिन वहां कोई जवाब नहीं है। कृपया मदद करें।

+0

'user.first.to_json' –

उत्तर

8

वसीयत encrypted_password जैसी विशेषताओं नहीं करता, ताकि महत्वपूर्ण जानकारी प्राप्त नहीं है कि एपीआई कॉल में उजागर तो इसे ओवरराइड करने के लिए, आपको serializable_hash विधि ओवरराइड करने की आवश्यकता है।

def serializable_hash(options = nil) 
    super(options).merge(encrypted_password: encrypted_password) 
end 

यह रेल 5 विशिष्ट विशेषता नहीं है बल्कि आपके गुणों की रक्षा के लिए एक सुविधा सुविधा है।

आशा है कि मदद करता है!

+0

हां। जो कुछ मैं ढूंढ रहा था वह था। यह पहले रेल 4.2 परियोजनाओं के निर्माण के साथ बनाया गया था। यकीन नहीं है कि क्यों ? – narym

+1

मुझे यकीन नहीं है लेकिन डेविस रेल 3 में ऐसा करने के लिए प्रयोग किया जाता है, लेकिन यह दिलचस्प है। मैं इस पर ध्यान दूँगा। – RSB

+1

मैंने अभी अपनी कुछ पिछली रेल 4 परियोजनाओं में चेक किया है, सभी विशेषताओं को वहां दिखाया गया है। 3.5.5 तैयार करें। – narym

1

कोशिश attributes विधि

User.first.attributes 
+0

यह सभी विशेषताओं को देता है। लेकिन उपयोगकर्ता के लिए केवल कुछ विशेषताएं क्यों दिखाई दे रही हैं। सबसे पहले। उदाहरण के लिए, @ user.to_json सभी विशेषताओं को जोड़ता नहीं है। इस प्रकार मणि की जेम प्रतिक्रियाओं को तैयार करना। – narym

+0

'@ user.attributes.to_json' –

+0

हे बार्टक आज़माएं, मैं इस तरह के गुण प्राप्त कर सकता हूं। लेकिन मेरा सवाल यह है कि, क्यों नहीं 'User.first' सभी विशेषताओं को दिखाता है। ? – narym

5

ऐसा इसलिए है क्योंकि devise उनके आंतरिक गुण का खुलासा नहीं करता है।

तो सभी विशेषताओं का उपयोग कर सकते हैं पाने के लिए .attributes (here दस्तावेज), जो एक हैश, जिस पर आप to_json कॉल कर सकते हैं देता है:

user = User.find(1) 
user.attributes.to_json # => contains all fields like reset_password_token etc. 
संबंधित मुद्दे