我可以用更惯用的Active Record方式写这个吗?

时间:2013-10-11 15:57:08

标签: ruby-on-rails ruby activerecord

如何重写这段代码以使用最大的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

它正在发挥作用,但我对它的外观并不满意。

1 个答案:

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