2012-01-29 13 views
10

Mam obiekt w Railsach, który ma atrybuty A, B, C, D i E. Podczas przekazywania tego obiektu z powrotem do klienta za pośrednictwem obiektu JSON, jak czy mogę powiedzieć kontrolerowi szyn, aby zawierał tylko atrybuty A i D w obiekcie JSON?Określanie atrybutów obiektu Rails przekazanego do obiektu JSON

ciągu mojego kontrolera Użytkownicy, mój kod wygląda następująco:

@user = User.find(params[:id]) 

    respond_to do |format| 
     format.html 
     format.json { render :json => @user} 
    end 

Ten kod działa, jednak obiekt JSON, który jest zwracany zawiera wszystkie atrybuty obiektu @user. Jak mogę ograniczyć atrybuty zawarte w obiekcie JSON, zanim coś zostanie wysłane do klienta?

AKTUALIZACJA: lucapette zapewnia dobre tło o tym, co dzieje się za kulisami. Ponieważ zdarza się, że pewnie chce wszystkie atrybuty zwracane, skończyło się za pomocą następującego kodu:

format.json { render :json => @user.to_json(:only => ["id"])} 

Odpowiedz

15
render :json => @user 

wezwie to_json na obiekcie @user. I metoda to_json będzie używać metody as_json do wykonania swojej pracy. Dzięki temu można łatwo zastąpić as_json, aby przekazywać tylko to, co chcesz klientom. Jak w poniższym przykładzie:

def as_json options={} 
    { 
    attr1: attr1, 
    attr2: attr2 
    } 
end 
+3

Dzięki, lucapette. Po przeczytaniu odpowiedzi przyjrzałem się metodom to_json i as_json. Następnie zmodyfikowałem swój kod w następujący sposób: format.json {render: json => @ user.to_json (: only => ["id"])}. Wygląda na to, że musi tam być jakiś niepotrzebny kod, ale nie mogłem znaleźć innego sposobu, żeby to zadziałało. – Vee

+0

tak, możesz również użyć opcji. Działa to również w ten sposób. To naprawdę zależy od sytuacji, z którą musisz się zmierzyć. – lucapette