我有2個型號:Purchase
和User
。 User
has_many :purchases
和Purchase
belongs_to :user
。我想選擇以下內容:ROR關係
有多少不同的用戶在過去3個月內進行過購買,也有一種打印他們電子郵件地址的方式('Purchase'有一個created_at字段)(我想這樣做使用控制檯)。對於如何從ruby的角度來看,我有點困惑(我可以做直接的SQL查詢,但我想弄清楚如何在Ruby中做到這一點)。
我有2個型號:Purchase
和User
。 User
has_many :purchases
和Purchase
belongs_to :user
。我想選擇以下內容:ROR關係
有多少不同的用戶在過去3個月內進行過購買,也有一種打印他們電子郵件地址的方式('Purchase'有一個created_at字段)(我想這樣做使用控制檯)。對於如何從ruby的角度來看,我有點困惑(我可以做直接的SQL查詢,但我想弄清楚如何在Ruby中做到這一點)。
Rails 2: Purchase.all(:conditions => ["created_at > ?", 3.months.ago]).user.uniq
Rails 3: Purchase.where(:created_at > 3.months.ago).user.uniq
Purchase.where(:created_at > 3.months.ago).map(&:user).uniq
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)
它總是取決於數據結構和U需要多少記錄有。 如果這是在你的開發環境中的控制檯上做任何你喜歡的事情,否則好的sql查詢將會表現得更好。
這樣:
User.joins(:purchases).where('purchases.created_at > ?', .month.ago).pluck('distinct(email)')
將返回用戶的電子郵件
當我嘗試了。用戶的數組.uniq我得到:NoMethodError:未定義的方法'user'for#(Rails 2 btw) –
execv
2012-01-15 20:27:54
嘗試'Purchase.all(:conditions => [「created_at>?」,3.months.ago])。地圖(&:用戶).uniq' – 2012-01-15 20:56:08