【问题标题】:Rails to_json including association with limitRails to_json 包括与限制的关联
【发布时间】:2014-10-02 09:47:30
【问题描述】:

我正在渲染一条具有如下关联的记录

render :json => Scheme.where("id=?", params[:id]).first
                      .to_json(:include => { :navs => { :only => [:schemeCode,:navDate,:navValue] }})

协会

Scheme has_many   navs
Nav    belongs_to scheme

我只需要在 Nav 中呈现最后一条记录,但上面将打印所有 nav,因为它是一对多的。我试过 :limit => 1 并在 desc 中对其进行排序,但限制本身不起作用。任何帮助将不胜感激。

render :json => Scheme.where("id=?", params[:id]).first
                      .to_json(:include => { :navs => { :only => [:schemeCode,:navDate,:navValue], :limit => 1 }})

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 associations to-json


    【解决方案1】:
    1. 如果您要创建复杂的 json 格式,请尝试在 RailsCast 中引入的 gem 'jbuilder' 以将结构留给查看。

      在您的 show.json.jbuilder 视图中,将其设置为:

      @scheme = Scheme.find(params[:id]) json.scheme @scheme.as_json json.extract! @scheme.navs.last, :schemeCode, :navDate, :navValue

      它将以 json 格式呈现数据,并保持控制器干净整洁。

    2. 如果您的id 是唯一的,则在您的代码中使用Scheme.where("id=?", params[:id]).first 可以缩短为Scheme.find(params[:id])

    【讨论】:

    • 感谢您的快速响应,JBuilder 是否处理急切负载?
    • jBuilder 只负责构建视图模板。我推荐它,因为您构建 json 格式的逻辑会使代码有点复杂。如果您使用include() 并且关联为has_many,我认为急切的负载将调用所有属于Scheme 的东西
    猜你喜欢
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    相关资源
    最近更新 更多