我在我的视图duel.duelers.last
中,假设在决斗中抓住dueler
并使用最后一个ID,但是如果一个来自更新属性,那么无论其顺序如何,该最后者将成为最后一个在id
?
如何根据id
抓取最后一个#?
pry(main)> Duel.last.duelers
=> [#<Dueler:0x007fa718513530
id: 310, # This is Duel.last.duelers.last but is listed first here
user_id: 2,
challenge_id: 398,
duel_id: 186,
#<Dueler:0x007fa718513288
id: 309, # This is Duel.last.duelers.first but is listed last here because it was most recently updated
user_id: 114,
challenge_id: 410,
duel_id: 186,
pry(main)> Duel.last.duelers.last
id: 310,
user_id: 2,
challenge_id: 398,
duel_id: 186,
pry(main)> Duel.last.duelers.first
id: 309,
user_id: 114,
challenge_id: 410,
duel_id: 186,
答案 0 :(得分:2)
你想根据id,
获取最后一个无论您在表格中最后更新哪一列,基本查询都将按duelers_id desc
Rails默认顺序:
在rails中,如果没有默认指定的顺序,那么它们将按数据库返回它们的顺序排序。 Usually this is by ID or insert order
。如果您在迁移中指定created_at/updated_at
列,那么Duel.last.duelers.last
Duel Load (0.5ms) SELECT `duels`.* FROM `duels` ORDER BY `duels`.`id` DESC LIMIT 1
Dueler Load (37.3ms) SELECT `duelers`.* FROM `duelers` WHERE `duelers`.`duel_id` = 1 ORDER BY `duelers`.`id` DESC LIMIT 1
列就会出现,因此将其作为默认订单列是没有意义的。
以下是我为您制作的示例查询。
SELECT
此查询首先加载相应的决斗,然后通过dueler_id desc获取该决斗顺序的最后一个。
检查查询
<强> .* FROM
duelers WHERE
duelers .
duelers = 1 ORDER BY
duel_id .
duelers DESC LIMIT 1
ID为" find_package(Boost 1.62.0 COMPONENTS program_options serialization system filesystem thread REQUIRED)"
强>
除非您提供默认范围,否则始终按ID desc排序。
在您的问题中,它以正确的顺序获取结果,这是Id
的降序答案 1 :(得分:1)
你可以尝试
Duel.last.duelers.order(id: :desc).first
或者
Duel.last.duelers.order(created_at: :desc).first
希望这有帮助!