使用筛选的ActiveRecord对象创建嵌套的JSON

时间:2014-07-15 11:56:32

标签: ruby-on-rails ruby json activerecord

我需要创建一个嵌套的JSON数据,其中包含3个级别的活动记录对象,如下所示:

  • 联系人有很多chantiers
  • Chantiers有很多照片
  render :json => contact.as_json(include: { 
                                    chantier: { include: { 
                                        photo: { only: [:url, :titre, :commentaires, :sharing]} }, 
                                    only: [:id, :nom_chantier]}
                                }, only: [:id, :type, :email, :firstname, :lastname])

目前,JSON与联系人关联的所有记录。但是,我需要限制3级对象照片,以便仅显示“共享”字段等于true的记录。

类似:Photo.where(sharing:true)而非所有照片

任何人都可以建议如何实现这一目标吗?

非常感谢

1 个答案:

答案 0 :(得分:3)

您可以这样做的一种方法是创建一个过滤的关联,以仅显示"共享照片",然后将其包含在您的JSON输出中。在Contact模型中,添加以下内容:

# You probably have something like this already:
has_many :photos

# Below is what you need to add

# Rails 4
has_many :shared_photos, -> { where(shared: true) }, source: :photos

# Rails 3
has_many :shared_photos, conditions: lambda { where(shared: true) }, source: :photos

一旦您设置了条件关联,就可以像as_json调用一样使用它,就像通常包含关联一样,如下所示:

render :json => contact.as_json(include: :shared_photos)