2015-04-22 2 views
2

Из-за ошибки, которая удалила пользователя в нашем Rails-приложении, я пытаюсь принудительно ввести другую запись пользователя в старый идентификатор записи.Rails: принудительно назначить идентификатор новой записи (или изменить идентификатор существующего)

$ rails console 
> User.find(2) 
ActiveRecord::RecordNotFound: Couldn't find User with 'id'=2 
> replacer = User.find(5) 
=> #<User id: 5, created_at: [omitted for brevity ...] > 
replacer.id = 2 
=> 2 
replacer.save 
=> true 
> User.find(2) 
ActiveRecord::RecordNotFound: Couldn't find User with 'id'=2 
> User.find(5) 
ActiveRecord::RecordNotFound: Couldn't find User with 'id'=5 
> replacer 
=> #<User id: 2, created_at: [omitted for brevity ...] > 
> replacer.valid? 
=> true 

Что здесь происходит?

+0

Вы не можете сделать это из AR, сделайте это прямо в базе данных. –

+0

Я сделал что-то подобное раньше с AR. Не уверен, как это сделать в базе данных ... странная вещь - запись, по-видимому, сохранена, но не может быть найдена в id: 5 * или * id: 2. Это похоже на то, что она потеряна в limbo ... – Meltemi

+0

Что происходит, когда вы выполняете 'replacer .save! '? –

ответ

1

Ваш оператор обновления построен с использованием идентификатора объекта памяти, который вы установили равным 2. Вы не можете обновить запись, которая не существует.

Если вы хотите, чтобы остаться в активной записи земли я думаю, что вы можете сделать: User.update(5, id: 2)

В противном случае, вы определенно можете это сделать в SQL. UPDATE users SET id = 2 WHERE id = 5.

+0

Можно ли это сделать и за столами, для отношений? Например, у вас есть одна и та же компания, введенная дважды в db, есть также отношения к обоим, и вам понадобятся все отношения к одному для ссылки на другой, чтобы вы могли объединить их. – unmircea

Смежные вопросы