gpt4 book ai didi

ruby-on-rails - each_cons(2) 的对顺序

转载 作者:太空宇宙 更新时间:2023-11-03 18:06:10 25 4
gpt4 key购买 nike

我有一个具有以下模型的 Rails 5.1 应用程序:

class Game < ApplicationRecord
has_and_belongs_to_many :players
end

class Player < ApplicationRecord
has_and_belongs_to_many :games
end

我在测试期间(使用标准装置 + minitest)在 Game 的方法之一中看到以下行为:

def foo
puts "players.first: #{players.first.id}, #{players.first.name}"
puts "players.second: #{players.second.id}, #{players.second.name}"
puts "players.last: #{players.last.id}, #{players.last.name}"
players.each_cons(2) do |pair|
puts "<<each_cons>> one: #{pair.first.id}, #{pair.first.name} - two: #{pair.second.id}, #{pair.second.name}"
end
end

输出:

players.first: 101088061, julia
players.second: 132733334, clara
players.last: 931424614, felix
<<each_cons>> one: 931424614, felix - two: 132733334, clara
<<each_cons>> one: 132733334, clara - two: 101088061, julia

我希望使用 julia, clara 然后是 clara, felix 调用它。这种相反顺序的原因是什么?

最佳答案

当您调用 players.first 时您可能会收到一个查询,该查询选择带有 order by "players"."id" ASC LIMIT 1 的玩家.

当您调用 second 时你可能会得到 order by "players"."id" ASC LIMIT 1 OFFSET 1 .

当您调用 players 时您没有应用此顺序。

如果这不是你想要的行为,那么定义:

@players = players.order(:id)

... 然后 @players.first@players.second将给出与您从 @players 获得的顺序一致的值因为您将使用 first 的数组实现和 second .

检查 SQL 语句的日志以确定。

关于ruby-on-rails - each_cons(2) 的对顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45001617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com