2016-09-22 27 views
7

Rails 5 API'yi devise ile kullanıyorum. User modelim var. Şema böyle görünüyor.Raylar 5 model nesne gösterme Tüm Devise özellikleri

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 

Ama yaşıyorum sorunu Raylar sadece modelin bir parçası olarak :id , :email , :created_at , :updated_at özelliklerini gösteren. Örneğin, konsolu

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"> 

raylar Ama database.This sorun daha önce bahsedilen bu özellikler mevcuttur. Devise with rails 5. Ama orada cevap yok. Lütfen yardım edin.

+0

'User.first.to_json' –

cevap

8

Devise encrypted_password gibi özelliklerini kısıtlar öylesine kritik bilgi almak etmediğini API çağrılarına maruz kaldı. Bunu geçersiz kılmak için serializable_hash yöntemini geçersiz kılmanız gerekir.

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

Bu Raylar 5 belirli bir özellik ancak özelliklerini korumak için bir Devise özelliği değildir.

Bu yardımcı olur umarım!

+0

Evet. Benim aradığım şey buydu. Bu, daha önce yapılmış olan Rails 4.2 projelerinde gerçekleştirilmemişti. Emin değilim neden ? – narym

+1

Emin değilim ama Devise bunu Rails 3'te yaptı, ama bu ilginç. Ben ona bakacağım. – RSB

+1

Daha önceki Rails 4 projelerinin bazılarına baktım, tüm özellikler burada gösteriliyor. Devise 3.5.5. – narym

1

deneyin attributes yöntem devise kendi iç özelliklerini açığa Bunun nedeni muhtemelen

User.first.attributes 
+0

Bu, tüm öznitelikleri verir. Ama neden sadece User.first için bazı özellikler ortaya çıkıyor. Örneğin, @ user.to_json tüm özellikleri eklemez. Böylelikle geminin json tepkilerini çözüyor. – narym

+0

try @ @ user.attributes.to_json' –

+0

Hey Bartek, öznitelikleri bu şekilde alabilirim. Ama sorum şu ki, neden User.first' tüm özellikleri göstermiyor. ? – narym

5

.

nedenle tüm kullanabileceğiniz niteliklerini almak için .attributes (here belgelenmiş) Eğer to_json çağırabilir hangi bir karma, döndürür:

user = User.find(1) 
user.attributes.to_json # => contains all fields like reset_password_token etc. 
İlgili konular