Сохранять исходный порядок при обновлении всех записей в Rails - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть таблица

create table foos
(
    id int,
    bar varchar(1),
    var int
)

и соответствующий класс модели

class Foo < ApplicationRecord
  self.table_name = "foos"
end

Я заполняю таблицу непосредственно с помощью консоли ruby ​​./script/rails console, как следует

Foo.new(:id => 1, :bar => "x", :var => 2).save
Foo.new(:id => 2, :bar => "y", :var => 2).save
Foo.new(:id => 3, :bar => "z", :var => 3).save

Если я распечатываю записи с Foo.all, я получаю этот заказ

#<ActiveRecord::Relation [
    #<Foo id: 1, bar: "x", var: 2>, 
    #<Foo id: 2, bar: "y", var: 2>, 
    #<Foo id: 3, bar: "z", var: 3>]> 

Если я запрашиваю select * from foos в базе данных, я получаю такой же заказ

id  bar  var
-------------
1   x    2
2   y    2
3   z    3

Тогда яобновите столбец bar для каждой записи, которая var равна 2 значением a

Foo.where(:var => 2).update_all(:bar => "a")

Если я снова распечатаю записи, я получу другой заказ

#<ActiveRecord::Relation [
    #<Foo id: 3, bar: "z", var: 3>, 
    #<Foo id: 1, bar: "a", var: 2>, 
    #<Foo id: 2, bar: "a", var: 2>]> 

Также, если я запрашиваю select * from foos в базе данных

id  bar  var
-------------
3   z    3
1   a    2
2   a    2

Есть ли способ сохранить порядок происхождения, если я обновлю записи, как объяснено?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

при обновлении поля в базе данных, в зависимости от конфигурации базы данных, порядок будет «старшим», а последним будет «младшее» поле, если вы добавите метку времени в базу данных, то посмотрите на нее.Затем, если вы хотите заказать в вашем sql, вы должны использовать «заказ», а затем поле, которое вы хотите заказать.

Foo.order(id: :asc)
Foo.order(id: :desc)
0 голосов
/ 19 февраля 2019

То, что вы хотите, это order записи по их идентификатору:

Foo.order(id: :asc)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...