我有2个模型:Purchase
和User
。 User
has_many :purchases
和Purchase
belongs_to :user
。我想选择以下内容:
在过去3个月中有多少不同的用户购买了,还有一种打印他们的电子邮件地址的方式('Purchase'有一个created_at字段)(我想使用控制台执行此操作)。关于如何从红宝石的角度来看,我有点困惑(我可以做直接的SQL查询,但我想知道如何在Ruby中做到这一点)。
答案 0 :(得分:1)
User.joins(:purchases).where("purchases.created_at > ?", 3.month.ago)
To get distinct user list
User.joins(:purchases).where("purchases.created_at > ?", 3.month.ago).uniq
To get distinct collection of user emails
User.joins(:purchases).where("purchases.created_at > ?", 3.month.ago).uniq.pluck(:email)
答案 1 :(得分:0)
Rails 2: Purchase.all(:conditions => ["created_at > ?", 3.months.ago]).user.uniq
Rails 3: Purchase.where(:created_at > 3.months.ago).user.uniq
答案 2 :(得分:0)
它总是取决于数据结构和你将拥有多少记录。 如果在你的开发环境中的控制台中做了你喜欢的任何事情,否则好的SQL查询会表现得更好。
答案 3 :(得分:-1)
Purchase.where(:created_at > 3.months.ago).map(&:user).uniq