3

如何重写这段代码以使用最大的 Active Record 查询接口和最小的 SQL?有没有更惯用的写法?

ticket_gifts = Gift
  .joins("LEFT JOIN giftable_items ON gifts.giftable_item_id = giftable_items.id")
  .select("gifts.total_value, gifts.created_at, gifts.user_id")
  .where("giftable_items.gift_type = 'ticket'")
  .to_sql

它正在完成它的工作,但我对它的外观并不满意。

4

1 回答 1

4

我认为应该这样做:

Gift.joins(:giftable_item).where(giftable_items: { gift_type: 'ticket' })

根据 Gift 和 GiftableItem 之间的关系,如果它是 has_many,则在连接中使用复数形式:

Gift.joins(:giftable_items).where(giftable_items: { gift_type: 'ticket' })
                         ^

更新:选择:

Gift.joins(:giftable_items)
    .where(giftable_items: { gift_type: 'ticket' })
    .select(['total_value', 'gifts.created_at', 'user_id'])
于 2013-10-11T16:01:21.097 回答