2016-06-03 46 views
9

, böyle bakıyor:Ben jsonb varsayılan Should için '{}' veya {} göçün bir göçte PostgreS veri türüyle <code>jsonb</code> ekleme hakkında okudum <a href="http://nandovieira.com/using-postgresql-and-jsonb-with-ruby-on-rails">the scarce instructions</a> Of

create_table :ref_check_ins do |t| 
    t.jsonb :document, null: false, default: '{}' 
    t.index :document, using: :gin 
end 

Ama herhangi bir neden yoktur '{}' yerine {}, String'in intead intead'i için öntanımlı olarak mı?

String türü, o sütunun sınıfa tanımlarken:

String < Object 

o tür Hash tanımlayan bu sütunun sınıfının:

Hash 

cevap

8

göç ​​dosyasında, ' vs '{}' kullanmak isteyeceksiniz.

Gerçekten bir süredir bununla uğraşıyordum, ve şudur: PG adaptörünün bir hashın bir jsonb nesnesine nasıl dönüştürüleceğini örtük olarak bildiğini düşünüyorum. Bir json nesnesinin bir dize değerini depoladığınız postgres DB'deki json türü gibi değil, gerçek bir ikili nesne (jsonb'de). Muhtemelen Rails 4.2 sürüm kodunda bir yere götürebilirim, ama eğer üzerinde ince belgeler varsa (ki yakın gelecekte ekleyeceğim) buradaki anahtar sizsiniz. '{}' yaptığınızda Postgres'den bir dizgeyi geri alıyor ve bu nedenle indifferent_access'u denediğinizde başarısız oluyor, çünkü bir dize kayıtsız erişime sahip olamaz. Muhtemelen ilk başlarda, sağladıkları bilgilerle ilgili birkaç sorun vardı. Ben açık istemek genellikle çok spesifik kayıt işlevselliği hallediyorum çünkü

dürüst birlikte iki büyük tabloları birleştirmek zorunda kalmadan bir rekor, {} üzerinde [] lehine, nasıl olsa dik {} kullanmayın. Bu benim 5.0, burada benim durum kullanım durumudur ve < 5, ama muhtemelen çok fazla değil, biraz farklı olabilir.