我有三张桌子说商店,物品和物品类型
shop 包含商店的名称, item 包含每个商店的项目, item_type 包含该项目的不同类型以及可用或不可用等状态。
现在我想渲染
format.json { render json: {:shop => @shops.as_json(:include => :items)}}
但根据条件,说 item_type_id='1' 和 item_type_status='available' 状态的项目
我有三张桌子说商店,物品和物品类型
shop 包含商店的名称, item 包含每个商店的项目, item_type 包含该项目的不同类型以及可用或不可用等状态。
现在我想渲染
format.json { render json: {:shop => @shops.as_json(:include => :items)}}
但根据条件,说 item_type_id='1' 和 item_type_status='available' 状态的项目
尝试这个:
@shops = Shop.includes(:items).where("items.itemp_type = ?", 'accesories')
format.json { render json: { :shop => @shops.as_json(:include => :items) } }
编辑:
一种方法是使用要渲染的对象创建一个散列,然后将其传递给 render 方法。像这样:
respond_to do |format|
format.json { render :json => {:shops => @shops,
:items => @items }}
end
如果模型没有通过活动记录关联,那可能是您最好的解决方案。
如果关联确实存在,您可以将 :include 参数传递给渲染调用,如下所示:
respond_to do |format|
format.json { render :json => @shops.to_json(:include => [:items])}
end
请注意,如果您采用这种方法,则不必在上面的部分中检索 @items 变量,Rails 会自动从 @shops 变量中加载它。
您可以将一个或多个方法传递给 to_json 或 as_json 方法并包含所需的记录。来自 Rails api 的示例:
user.as_json(:methods => :permalink)
# => {"id": 1, "name": "Konata Izumi", "age": 16,
"created_at": "2006/08/01", "awesome": true,
"permalink": "1-konata-izumi"}