1

我有一家与 has_many 关联的商店,并在其中包含物品,以便收到属于该商店的物品

 format.json { render json: {:shop => @shops.as_json(:include => :items)}}

现在它提供了属于该商店的所有物品,但我想获得具有特定条件的物品,比如 item_type = "accessories"。那么我该怎么做呢?请帮我。

编辑

我在How to get the value of include with conditions? 中提出了一个新问题?

4

2 回答 2

1

您应该使用 ActiveRecord 过滤数据,然后在过滤后的数据上调用 as_json。

您可以执行以下操作:

@shops = Shop.includes(:items).where("items.itemp_type = ?", 'accesories')
format.json { render json: { :shop => @shops.as_json(:include => :items) } }
于 2013-04-05T06:54:36.053 回答
0

一种方法是使用要渲染的对象创建一个散列,然后将其传递给 render 方法。像这样:

respond_to do |format|
  format.json  { render :json => {:shops => @shops, 
                                  :items => @items }}
end

如果模型没有通过活动记录关联,那可能是您最好的解决方案。

如果关联确实存在,您可以传递一个:include argument to the render call,如下所示:

respond_to do |format|
  format.json  { render :json => @shops.to_json(:include => [:items])}
end

请注意,如果您采用这种方法,则不必在上面的部分中检索 @items 变量,Rails 会自动从@shops变量中加载它。

于 2013-04-05T06:58:56.813 回答