2011-08-07 10 views
13

Próbuję renderować obiekt jako json, włączając w to zagnieżdżone atrybuty i sortować je według atrybutu created_at.Railsy renderowane jako json, obejmują zagnieżdżony atrybut i sortowanie

Robię to za pomocą kodu:

format.json { render :json => @customer, :include => :calls} 

Jak można sortować według atrybutu created_at nazywa?

+0

Chyba można zdefiniować domyślny rodzaj podczas definiowania relacji. http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many – rubish

+0

Przepraszamy za bycie gramatykiem nazistowskim, ale render jest terminem graficznym. Poprawna terminologia jest kodowana. – tjameson

+3

@tjameson Wywołują metodę render (: json), myślę, że bezpiecznie jest odnosić się do niej jako renderowania JSON w tym kontekście. – Gazler

Odpowiedz

38

Jeśli myślisz, jak działa Rails, połączenia to tylko metoda odnosząca się do modelu Call. Możesz to zrobić na kilka sposobów. Jedną z nich jest ustawienie opcji zamówienia w powiązaniu. Jednym z nich jest zmiana domyślnego zakresu modelu połączeń na całym świecie, kolejny tworzy nową metodę w modelu klient, który zwraca połączeń

Metoda 1 (przydatne, jeśli chcesz zrobić coś z połączeniami przed kodowaniem.):

class Customer < ActiveRecord::Base 
    has_many :calls, :order => "created_at DESC" 
end 

UPDATE

Dla szyn 4 i powyżej użytku:

class Customer < ActiveRecord::Base 
    has_many :calls, -> { order('created_at DESC') } 
end 

Metoda 2:

class Call < ActiveRecord::Base 
    default_scope order("created_at DESC") 
end 

Metoda 3:

class Call < ActiveRecord::Base 
    scope :recent, order("created_at DESC") 
end 

class Customer < ActiveRecord::Base 
    def recent_calls 
    calls.recent 
    end 
end 

Następnie można użyć:

format.json { render :json => @customer, :methods => :recent_calls} 
+0

Schludnie, czysto, +1 – apneadiving

+0

Dzięki! Pomocny. – lxcid

+0

: metody, idealne. – thatmiddleway

Powiązane problemy