Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ROR关系_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails ROR关系

Ruby on rails ROR关系,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有两种型号:购买型和用户型。用户有多个:购买,并且购买属于:用户。我想选择以下选项: 在过去3个月里,有多少不同的用户进行了一次购买,以及打印他们的电子邮件地址“购买”的方式有一个已创建的_at字段,我只想使用控制台执行此操作。对于如何从ruby的角度进行查询,我有点困惑,我可以直接进行SQL查询,但我想知道如何在ruby中进行查询 Purchase.where:created\u at>3.month.ago.map&:user.uniq它始终取决于数据结构和您将拥有的记录数量。 如果这是在

我有两种型号:购买型和用户型。用户有多个:购买,并且购买属于:用户。我想选择以下选项:


在过去3个月里,有多少不同的用户进行了一次购买,以及打印他们的电子邮件地址“购买”的方式有一个已创建的_at字段,我只想使用控制台执行此操作。对于如何从ruby的角度进行查询,我有点困惑,我可以直接进行SQL查询,但我想知道如何在ruby中进行查询

Purchase.where:created\u at>3.month.ago.map&:user.uniq

它始终取决于数据结构和您将拥有的记录数量。 如果这是在您的开发环境上的控制台中,请随意执行,否则良好的sql查询将执行得更好

选择需要的字段,在可能的情况下使用Pull获取ID。 使用这些ID进行直接查询。 要进行比较,您必须使用sql。 如果您只需要电子邮件,请在查询中添加一个select,这样您就可以使用“select email from users;”而不是“从用户中选择*”。 因此:

将返回一系列用户的电子邮件


除此之外,当我尝试.user.uniq时,您是否费心阅读并尝试了

,我得到了:NoMethodError:Rails 2 btwTry Purchase的未定义方法“user”。all:conditions=>[created_at>?,3.months.ago]。map&:user.uniq
Rails 2: Purchase.all(:conditions => ["created_at > ?", 3.months.ago]).user.uniq

Rails 3: Purchase.where(:created_at > 3.months.ago).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)
User.joins(:purchases).where('purchases.created_at > ?', .month.ago).pluck('distinct(email)')