2016-04-12 17 views
0

Hesap başına json çıktısının özelleştirilmesine izin vermem gerekiyor. Bir kişi standart json cevabını beğenebilir. Bir diğeri, "account_name" veya "bir şey" adı verilen "name" alanına ihtiyaç duymadıklarından, aynı feed'e sahip olmak isteyebilir.Rails yanıtlarında JSON alan adlarını değiştirme

onlar

@model.to_json(only: [:name, :title, :phone]) 

ile mutlu olabilir standart bir kullanıcı ile Yani başka bir kullanıcı I as_json/to_json geçersiz çözümler bulduk

@model.to_json(only: [:name (AS ACCOUNT_NAME) , :title, :phone]) 

olarak json tepkisini görmek isteyebilirsiniz model ama bu herkesi etkileyen çözümler gibi görünüyor. Onları her bir erişim/hesap bazında nasıl değiştirebilirim?

+1

gibi görünür, çünkü Yapmak istediğin son derece tuhaf bir şey. Özel alan adlarını nasıl saklamayı düşünüyorsunuz? Bu özel alan haritalamasını almanız ve ön uç ne olursa olsun talebi as_json'ın çıktısına uygulamanız size kalmış. – meagar

+0

alan takma adları, bir çeşit şablonda veya yalnızca "set name = new_name" veya benzer bir şekilde saklanır. Bazı kullanıcılar backend farklı giriş gerektirir, bu yüzden –

+0

@ 7urkm3n uyum için zorlandım Bu geçerli bir geçerli sözdizimi değil, ama adil olmak gerekirse, sorudaki örnekler geçerli sözdizimi de değildir. – meagar

cevap

2

Durumunuza göre, Jbuilder kullanarak kodu temiz yapmak için mantığı view katmanına itmek daha iyidir. bunun yerine geçersiz kılma to_json yöntemin aşağıdaki gibi bir şey yapabilirsiniz:

# app/views/users/show.json.jbuilder 

json.model_name do 
    json.title @current_user.title 
    json.phone @current_user.phone 
    if current_user.type_account_name? # need to implement this logic somewhere in your app 
    json.account_name @current_user.name 
    else 
    json.name @current_user.name 
    end 
end 

güncelleme

kontrolör bunu yapmak için hiçbir "Raylar" yolu yoktur bu

class UsersController < ApplicationController 
    def show 
    @user = User.find(params[:id]) 
    end 
end 
+0

Teşekkür ederim, bununla çalışabilirim. Kontrolör bunun için neye benziyor? –

+0

Jbuilder, rayların bir parçasıdır, bu yüzden html versiyonunu döndürmek istemezseniz, sadece json versiyonuna sahipseniz, sadece @ model.to_json dosyasını kaldırabilirsiniz (sadece: [: name,: title,: phone]) ' Sadece @ modelinin atandığından emin olun. daha sonra raylar sizin için otomatik olarak jbuilder şablonunu oluşturacaktır –

+0

teşekkürler, bunu denemek istiyorum –

İlgili konular