【问题标题】:Ordering JSON rendered by Rails controller排序由 Rails 控制器呈现的 JSON
【发布时间】:2011-12-18 06:02:06
【问题描述】:

我有一个 Rails 3.1 控制器,它呈现用户的联系人,包括关联的电子邮件对象和消息对象。如果我只渲染联系人,我可以执行以下操作:

@contacts = @current_user.contacts.order('last_name asc', :include => [:emails, :messages]) 渲染 json: @contacts, :include => [:emails, :messages]

如您所见,我想按姓氏而不是默认 ID 对联系人进行排序。我现在还需要将用户对象与其他关联对象一起渲染。所以我尝试了以下方法,但当然联系人的顺序不正确:

渲染 :status => 200, :json => { :user => @current_user.as_json( :include => { :foos => { :except => :user_id }, :联系人=> { :except => :user_id, :include => [:emails,:messages] }, :酒吧 => { :except => :user_id } } ) }

我在as_json documentation 中没有看到任何帮助,而且我也无法通过反复试验找到正确的语法。

【问题讨论】:

    标签: json ruby-on-rails-3.1 associations render nested-attributes


    【解决方案1】:

    在这种情况下,我会在 Ruby / SQL 中订购联系人,然后构建您自己的 JSON 来呈现,而不是使用 as_json 及其各种 :include / :except 方法。

    构建数据的哈希,然后将其发送到渲染。

    有各种各样的库可以让构建 JSON 变得更容易。 JBuilder 就是这样一个库。查看 JBuilder 页面底部的其他类似库的链接。

    【讨论】:

    • 我最终使用了json_builder。正是我想要的。将我的渲染时间减少了大约 55%,更不用说增加的透明度了。
    猜你喜欢
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    相关资源
    最近更新 更多