Нет, это не гарантирует, что вы совершите с самым высоким id
. Если вы не укажете явное упорядочение, записи могут выйти из базы данных в любом порядке. То, что они выглядят так, будто они сортируются по id
, - это просто удобная авария.
Вы должны сделать один из них:
highest_id_execution = trade.executions.order(:id).last
highest_id_execution = trade.executions.order('id desc').first
Это даст вам исполнение для trade
, который имеет самый высокий id
. Если вы действительно хотите, совсем недавно созданный один, то вы должны order(:created_at)
вместо:
most_recent_execution = trade.executions.order(:created_at).last
most_recent_execution = trade.executions.order('created_at desc').first
id
и created_at
колонны почти всегда будет в том же порядке, но вы должны сказать, что вы имеете в виду, чтобы сделать вещи понятнее людям, которые сохраните свой код.
В обоих случаях order(:x).last
и order('x desc').first
являются точно такими же и даже разрешены точно таким же SQL, поэтому используйте то, что вам больше всего подходит.
+1, Вы можете добавить ': параметр order' в' executions ', то есть' has_many: executions,: order => "executions.created_at" ', таким образом' trade.executions.last' возвращает последнее выполнение на основе 'timestamp', а не' id'. –
@ KandadaBoggu: правда, но я предпочитаю минимальные ассоциации, чтобы избежать ненужных ORDER BY и 'reorder's. –
Насколько я понимаю, я использую этот подход в очень редких случаях, когда чрезмерная сортировка по умолчанию делает ассоциацию интуитивной. –