如何重写这段代码以使用最大的Active Record Query接口和最小的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
它正在发挥作用,但我对它的外观并不满意。
答案 0 :(得分:4)
我认为应该这样做:
Gift.joins(:giftable_item).where(giftable_items: { gift_type: 'ticket' })
取决于礼物和礼物之间的关系。 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'])