一尘不染

Rails渲染为json,包括嵌套属性和排序

json

我正在尝试将一个对象呈现为json,包括嵌套的属性,并按created_at属性对其进行排序。

我正在使用代码执行此操作:

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

如何按created_at属性对呼叫进行排序?


阅读 195

收藏
2020-07-27

共1个答案

一尘不染

如果您认为Rails是如何工作的,则调用只是与Call模型相关的一种方法。有几种方法可以做到这一点。一种是在关联上设置订单选项。一种是全局更改Call模型的默认范围,另一种是在Customer模型中创建一个新方法来返回调用(如果您希望在编码之前对调用进行任何操作,则很有用。)

方法1:

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

更新

对于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}
2020-07-27