#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. Рекомендуется обновлять существующие записи при миграции. Просто знайте это.