我有两张表Promo
和Image
Promo
有id和名称
Image
有promo_id名称和img_url
assosiations =>促销has_many图像
我希望从image
表中获取第二条记录,其中promo_id为1,
for_example如果我做Promo.first.images.second
它对于性能不好
如果我的图像表有很多记录
所以我想我需要像Promo.joins(:images).where('????')
答案 0 :(得分:0)
我想从图像表中获取第二条记录,其中promo_id 1
由于promo_id
表中有images
,因此不需要join
:
Image.where(promo_id: 1).second
#=> SELECT "images".* FROM "images" WHERE "images"."promo_id" = $1 ORDER BY "images"."id" ASC LIMIT $2 OFFSET $3 [["promo_id", 2], ["LIMIT", 1], ["OFFSET", 1]]
如果您还要指定图片id
,只需将其添加到where
:
Image.where(promo_id: 1, id: 2)
#=> SELECT "images".* FROM "images" WHERE "images"."promo_id" = $1 AND "images"."id" = $2 LIMIT $3 [["promo_id", 1], ["id", 2], ["LIMIT", 11]]
这假定第二张图片id
为2
。
这两个选项都会为您的数据库生成一个简单的查询,因此您不应该遇到性能问题(我还假设您已在images
表中设置索引)。