Soru Rails Jbuilder ile tüm özellikleri nasıl elde edersiniz?


Jbuilder.json şablonunda her zaman böyle kodlar yazmak bir acıdır:

json.extract! notification, :id, :user_id, :notice_type, :message, :resource_type, :resource_id, :unread, :created_at, :updated_at

Yani böyle kodlamak isterdim;

json.extract_all! notification

Aşağıdaki kodlar gibi yapabileceğimi buldum, ama hala benim için biraz uzun.

notification.attributes.each do |key, value|
  json.set!(key, value)
end

Daha iyi bir yolu var mı?


23
2018-04-12 07:38


Menşei


Belki bu biraz daha basit, json.extract! notification, *notification.attributes.keys Ama eğer Jbuilder böyle bir yönteme sahipse, onu kullanmak istiyorum. - chikaram


Cevaplar:


Belki kullanabilirsiniz json.merge!.

json.merge! notification.attributes

https://github.com/rails/jbuilder/blob/master/lib/jbuilder.rb#L277


39
2018-05-02 06:40



Teşekkürler! Bu tam olarak istediğim şey! Sadece, Rails sürümüm 4.0, bu yüzden önce 4.1'e yükseltmeliyim. - chikaram
Ben sadece bu yöntemi Rails 4.1 ile kullanmaya çalıştım ama maalesef 4.1'de birleştirilmiş gibi görünmüyor. Bu yüzden biraz daha beklemeye karar verdim. - chikaram
En son jbuilder sürümünü mi kullanıyorsunuz? Deneyin bundle update jbuilder. - uiureo
Oh jbuilder sadece bir mücevher ve şimdi Rails sürümleri ile ilgisi yok. Yöntem jbuilder 2.1.1 ile iyi çalıştı! Zahmet ettiğiniz için çok teşekkür ederim. - chikaram
Hassas özellikleri ortaya çıkarmaya dikkat edin. Ekle reject bir veya daha fazlasını filtrelemek için: json.merge! user.attributes.reject {|k, v| k == 'encrypted_password' } - bjnord


Ben jbuilder 1.5.0 kullanıyorum ve birleştir! çalışmadı ama alternatif bir sözdizimi buldum:

json.(notification, *notification.attributes.keys)

8
2017-10-14 13:36



Bu aynı zamanda Jbuilder.key_format ayar - Dakuan
@Dakuan'ın dediği gibi, bu itaat JBuilder.key_format Anahtarlarınızı snake_case'den camelCase'e çeviriyorsanız gerekli olan ayar. Göre bu tren istasyonu Bu sözdiziminin ruby'in bazı sürümlerinde çalışmayacağına inanıyorum, bu durumda çalışma sözdizimi json.extract! notification, *notification.attributes.keys - abl


@Uiureo'nun cevabına daha fazla ekleme

Bildiriminizin bir çeşit resim yükleyici (örneğin, carrierwave, paperclip) olduğunu varsayalım.

Daha sonra aşağıdaki sürüm size uploader nesnesini döndürmeyecek, bu yüzden görüntü URL'sini nasıl edineceksiniz?

json.merge! notification.attributes

notification.attributes nesnenin karma dönüşümü, mounter loader sütun değerini döndürür, ancak url'yi döndürmez.

örnek cevap

notification: Object {
   title: "hellow world"
   img: "sample.png"
}

Bunun yerine bunu dene

json.merge! notification.as_json

Bu, URL'yi, URL için sorgulayabileceğiniz başka bir nesne olarak döndürecektir.

örnek cevap

notification: Object {
   title: "hellow world"
   img: Object {
       url: "https://www.example.com/sample.png"
   }
}

2
2017-10-05 11:03





Bakabilirsiniz json.except!

json.except! @resource, :id, :updated_at

json.except! @resource

https://github.com/chenqingspring/jbuilder-except


0
2017-08-21 07:14