Rails多表关联查询:获取指定vendor_id的关联表记录
获取指定Vendor的WarehouseIngredient和WarehouseIngredientLog记录
嘿,针对你的需求,有几种简洁的实现方式,你可以根据业务场景灵活选择:
方法1:通过Vendor关联获取(推荐,贴合Rails关联设计)
如果后续需要操作这个Vendor实例,直接利用模型间的关联关系就能轻松拿到数据:
# 先找到目标vendor vendor = Vendor.find(1) # 获取关联的所有WarehouseIngredient记录 warehouse_ingredients = vendor.warehouse_ingredients # 获取关联的所有WarehouseIngredientLog记录 warehouse_ingredient_logs = vendor.warehouse_ingredient_logs
要是想避免后续访问关联时触发额外的数据库查询,可以提前预加载关联数据:
# 预加载两个关联表,总共只触发3次查询(1次查Vendor,2次查关联表) vendor = Vendor.includes(:warehouse_ingredients, :warehouse_ingredient_logs).find(1)
方法2:直接查询模型(更直接,无需加载Vendor)
如果不需要用到Vendor对象,直接针对两个模型做条件查询就够了:
# 查询vendor_id=1的所有WarehouseIngredient warehouse_ingredients = WarehouseIngredient.where(vendor_id: 1) # 查询vendor_id=1的所有WarehouseIngredientLog warehouse_ingredient_logs = WarehouseIngredientLog.where(vendor_id: 1)
要是想把两个结果整合到一起方便后续处理,可以放到一个哈希里:
combined_results = { warehouse_ingredients: WarehouseIngredient.where(vendor_id: 1), warehouse_ingredient_logs: WarehouseIngredientLog.where(vendor_id: 1) }
两种方法都能满足需求:如果后续要用到Vendor的其他属性,方法1更顺手;如果只需要这两个表的数据,方法2会更高效。
内容的提问来源于stack exchange,提问作者Qaiser Wali
相关产品推荐
相关产品推荐

