在Ruby on Rails中渲染JSON并按属性过滤

时间:2013-09-19 00:00:39

标签: ruby-on-rails ruby json

以下呈现了属性selected_branch的json,包括其所有产品以及产品的类别:

render json: selected_branch, :include => { :products=> {:include =>:categories }, :enabled => true }

我怎样才能包含所有“Product.enabled = true”的产品?

1 个答案:

答案 0 :(得分:0)

在ActiveRecord查询的早期,您可能会获得selected_branch的数据,请在render :json之前将其构建到您的查询中。我首先在模型上使用rails scope。

这样的事情:

在你的模型中(不确定它是什么,所以我将它称为分支)

Branch.rb

class Branch < ActiveRecord::Base
   has_many :products
   scope :with_enabled_products, -> { includes(:products).where(products: {enabled: true}) }
end

然后在您的控制器中

selected_branch = Branch.with_enabled_products

然后,您呈现的JSON应该只是已启用产品的分支的JSON。当然,您总是可以将.where(...)添加到该范围的末尾,因为它只是一个ActiveRecord关系,您可以进一步缩小数据集范围。