Обновите новый столбец таблицы, увеличивающий значение в rails 3.2

#ruby-on-rails #ruby #activerecord #ruby-on-rails-3.2

#ruby-on-rails #ruby #activerecord #ruby-on-rails-3.2

Вопрос:

Я хочу упорядочить записи в моей таблице, и они будут переупорядочены пользователем позже, поэтому я не хочу использовать идентификатор. Я только что добавил столбец:order, и в настоящее время все значения равны нулю. Я знаю, что могу присвоить им всем одинаковое значение, используя update_all, но как я могу присвоить каждой строке значение, на единицу превышающее предыдущее (например, 1,2,3,4,5,6 и т.д.)?

Я использую rails 3.2.

Комментарии:

1. Вы можете выполнять цикл и обновлять каждый из них по отдельности. или почему бы вам не обновить поле с их значением id?

Ответ №1:

Вам необходимо загрузить свои order поля в миграцию. Если у вас много записей, подумайте о том, чтобы обернуть это в транзакцию:

 Class.transaction do
  Class.each_with_index do |record, index|
    # index will start at 0 which is probably not what you want
    record.update_attribute :order, index   1
  end
end
  

Комментарии:

1. Да, действительно, я только что обновил ответ в соответствии с вашим предложением

Ответ №2:

Просто чтобы добавить к @mdemolin ответу , в rails мы обычно используем начальные значения для заполнения базы данных, так что вы также можете создать задачу rake и обновить свои значения порядка там. В вашем файле db / seeds.rb вы можете сделать:

 users = User.all
users.each_with_index do |user, index|
  user.update_attribute(:order => index 1 )
end
  

а затем запустите rake db:seed в вашем терминале

Комментарии:

1. use seeds to populate database но операционной системе необходимо обновить существующие записи. В этом случае подробнее о миграциях.

2. @PhilidorGreen это будет работать и в существующей записи, в конце концов, начальный файл — это всего лишь файл ruby

3. О, я не говорил, что это не работает. Но, в конце концов, это не соглашение rails.

4. @PhilidorGreen Он ничего не упомянул о миграциях, на самом деле, если вы посмотрите на этот вопрос, там говорится I have just added the :order column and the values are currently all nil , что он действительно хочет заполнить его значениями

5. Рекомендуется обновлять существующие записи при миграции. Просто знайте это.