2011-08-07 33 views
13

我想呈现一个对象为json,包括嵌套的属性,并通过created_at属性对它们进行排序。Rails渲染为json,包括嵌套的属性和排序

我这样做是使用代码:

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

我如何排序created_at属性要求?

+0

我想在定义关系,您可以定义默认的排序。 http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many – rubish

+0

对不起,作为一个语法纳粹,但渲染是一个图形术语。正确的术语是编码。 – tjameson

+3

@tjameson他们正在调用render(:json)方法,我认为在此上下文中将其称为呈现JSON是安全的。 – Gazler

回答

38

如果您认为Rails是如何工作的,则调用只是一种与Call模型相关的方法。有几种方法可以做到这一点。一种是在关联上设置订单选项。一种是改变全球呼叫模型的默认范围,另外创建了一个返回呼叫客户模型的新方法

方法1(如果你愿意做编码之前调用任何用处。):

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

UPDATE

对于轨道4及以上使用:

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

方法2:

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

方法3:

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

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

然后你可以使用:

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

整洁,干净,+1 – apneadiving

+0

谢谢!很有帮助。 – lxcid

+0

:方法,完美。 – thatmiddleway