【问题标题】:How to sort Rails Active Model serializers' response如何对 Rails Active Model 序列化程序的响应进行排序
【发布时间】:2013-08-10 21:40:34
【问题描述】:

奇怪的是,我还没有找到关于这个主题的任何东西......

如何对 Rails 服务器提供的 JSON 进行排序?我目前正在使用 ActiveModel 序列化器:

 embed :ids, include: true
 attributes :id, :name

 has_many :places

我想对嵌入的places进行排序。

我找到的唯一答案是this SO question,但它解释了序列化程序默认如何排序,而不是我如何排序。

【问题讨论】:

    标签: ruby-on-rails active-model-serializers


    【解决方案1】:

    您可以将其定义为属性并处理排序。例如:

    def places
        object.places.order("title")
    end
    

    https://github.com/rails-api/active_model_serializers#associations

    【讨论】:

    • 我将您的答案标记为已接受,因为您为我提供了更好的关键字:order。我正在搜索 sort 并没有得到任何结果,但是对于 order,我得到了这个 SO 问题 (stackoverflow.com/questions/6972406/…),它解释了其他方法来做我想做的事情 - 你的工作也像一个魅力。
    • 快速注意,如果您的子对象也通过了序列化程序,这将破坏它,并恢复使用 as_json
    • 奇怪的是它没有与模型关联相同的 DSL,您可以在那里下订单。
    • 有没有办法在不添加 N+1 查询的情况下实现这一点?
    • 我把这个添加到模型的has_many:has_many :images, ->{ order(position: :asc) }, class_name: "PropertyImage"
    【解决方案2】:

    我更喜欢这种方式

    has_many :person_medals do
      object.places.order(:title)
    end
    

    【讨论】:

    • 这很好。更清洁,还解决了@FearMediocrity 在接受的答案中评论的问题 - 如果子对象也通过序列化程序,您的订单仍然会坚持。
    猜你喜欢
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多