我需要创建一个嵌套的JSON数据,其中包含3个级别的活动记录对象,如下所示:
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)而非所有照片
任何人都可以建议如何实现这一目标吗?
非常感谢
答案 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)