для рельсов 4:
Post.create(:title => 'Test').update_column(:id, 10)
Другие ответы по Rails 4 сработали не у меня. Многие из них казались измененными при проверке с помощью Rails Console, но когда я проверял значения в базе данных MySQL, они оставались неизменными. Другие ответы работали только иногда.
По крайней мере, для MySQL назначение id
ниже номера идентификатора автоматического приращения не работает, если вы не используете update_column
. Например,
p = Post.create(:title => 'Test')
p.id
=> 20 # 20 was the id the auto increment gave it
p2 = Post.create(:id => 40, :title => 'Test')
p2.id
=> 40 # 40 > the next auto increment id (21) so allow it
p3 = Post.create(:id => 10, :title => 'Test')
p3.id
=> 10 # Go check your database, it may say 41.
# Assigning an id to a number below the next auto generated id will not update the db
Если вы измените create
на использование new
+ save
, у вас все еще будет эта проблема. Ручное изменение id
, например p.id = 10
, также вызывает эту проблему.
В общем, я бы использовал update_column
для изменения id
, даже если это потребует дополнительного запроса к базе данных, потому что он будет работать постоянно. Это ошибка, которая может не отображаться в вашей среде разработки, но может незаметно повредить вашу производственную базу данных, говоря, что она работает.