Rails获得第二个记录连接表

时间:2017-05-11 18:59:48

标签: sql ruby-on-rails postgresql activerecord

我有两张表PromoImage

Promo有id和名称

Image有promo_id名称和img_url

assosiations =>促销has_many图像

我希望从image表中获取第二条记录,其中promo_id为1,

for_example如果我做Promo.first.images.second它对于性能不好 如果我的图像表有很多记录

所以我想我需要像Promo.joins(:images).where('????')

这样的东西

1 个答案:

答案 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]]

这假定第二张图片id2

这两个选项都会为您的数据库生成一个简单的查询,因此您不应该遇到性能问题(我还假设您已在images表中设置索引)。