Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.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/5/ruby-on-rails-4/2.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 从Ruby on Rails上的关联表中获取第一个条目_Ruby On Rails_Ruby On Rails 4_Activerecord - Fatal编程技术网

Ruby on rails 从Ruby on Rails上的关联表中获取第一个条目

Ruby on rails 从Ruby on Rails上的关联表中获取第一个条目,ruby-on-rails,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby On Rails 4,Activerecord,我有一个一对多的关系:用户有很多付款。我试图找到一个查询,该查询获取每个用户的第一笔付款(使用payments表中的created_at) 我在SQL响应中发现了一个类似的问题,但我不知道如何使用Active Record编写它 引用答案: select t.username, t.date, t.value from MyTable t inner join ( select username, max(date) as MaxDate from MyTable gr

我有一个一对多的关系:用户有很多付款。我试图找到一个查询,该查询获取每个用户的第一笔付款(使用payments表中的created_at)

我在SQL响应中发现了一个类似的问题,但我不知道如何使用Active Record编写它

引用答案:

select t.username, t.date, t.value
from MyTable t
inner join (
    select username, max(date) as MaxDate
    from MyTable
    group by username
) tm on t.username = tm.username and t.date = tm.MaxDate
对我来说,应该是最小而不是最大


谢谢:)

为POSTGRES试一试这个

Payment.select("DISTINCT ON(user_id) *").order("user_id, created_at ASC")
而对于SQL

Payment.group(:user_id).having('created_at = MAX(created_at)')

我不确定,但试试这个:

在控制器中:

  def Page
    @payments = Payment.first
  end
在html.erb中:

<% @payments.each do |payment| %>
  <p> <%= payment.amount %> </p>


希望这有帮助

如果我要回答上述问题:(I不基于给定的原始SQL

Record.association.order(:created_at).first
用户有很多付款。我试图找到一个查询,该查询获取每个用户的第一笔付款(使用付款表中创建的地址)。

Let say:
# Assumed to have a Single User, as reference
user = User.first

# Now, get first payment (from Payment model)
user.payments.last
# .last since it will always get the first created row by created_at.
如果我完全理解你的意图。我不知道你为什么需要最大或最小日期

这个怎么样

如果您想要每个用户的首次付款

dates = Payment.group(:user_id).minimum(:created_at).values
payments = Payment.where(created_at: dates)
从付款你也可以找到用户

我认为您的用户名是外键,您可以相应地更改。:) 让我知道如果你面临任何问题,因为我测试它的工作


我知道这个答案不是最好的,但它甚至可以工作或处理毫秒差的事务,因为rails使用ms级别保存日期(创建日期和更新日期)。

很抱歉没有回复所有内容,但经过多次测试后,这是我得到的最快的答案(在运行时):

Payment.where(:id => Payment.group(:user_id).pluck(:id))
我是说这可能不是最快的方法,因为我使用的是子查询。我正在获取唯一值和ID:

Payment.group(:user_id).pluck(:id)
那我就匹配那些身份证了

这样做的缺点是,为了得到最后一笔付款,它不会反向工作


也可以使用
groupby
map
但是,由于
map
来自ruby,它需要花费更多的时间。

我不能使用循环,我尝试在一个查询中完成所有操作。实际上,我需要@user.payments.first为每个用户,从一个查询。请检查更新的答案。希望它能为您服务case@FakhirShad对于SQLOne,我认为应该是
MIN(created\u at)
是的,您可以根据需要使用MIN或max。Mix将为您提供第一笔付款,max将检索最后一笔付款。您希望结果如何?所有付款?或者他们也必须和他们的用户一起来?我在寻找一个查询,而不是一个循环,正如我在另一个问题中所说:)