Можно ли обновить всю запись, используя объект в рельсах? - PullRequest
0 голосов
/ 14 ноября 2018

Мне было интересно, смогу ли я обновить запись (всю строку) с учетом замещающего объекта activerecord.

Что-то вроде

Car.find_by(number: 1) = replacement_information_for_car_1

, где replacement_information_for_car_1 - это Car объект activerecord, который я хотел бы использовать для замены старой записи, находящейся в данный момент в таблице.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Особенность объектов ActiveRecord заключается в том, что они имеют уникальный идентификатор, который вы не хотите переопределять. Вам придется назначать атрибуты без идентификатора, который, скорее всего, будет nil в вашем примере.

Car.find_by(number: 1).update(replacement_information_for_car_1.attributes.except(:id))

Это длинная строка, которая может быть преобразована в что-то вроде

new_attributes = replacement_information_for_car_1.attributes.except(:id)
Car.find_by(number: 1).update(new_attributes)
0 голосов
/ 14 ноября 2018

Вы можете сделать что-то вроде:

attributes = replacement_information_for_car_1.attributes
attributes.delete('id') # and anything else you don't want/can't be copied
Car.find_by(number: 1).update(attributes)

Не самая милая вещь в мире, но она должна сработать.

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