如何根据.id得到.last对象?

时间:2016-10-24 05:33:05

标签: ruby-on-rails ruby

我在我的视图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,

2 个答案:

答案 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

希望这有帮助!