рельсы 3.1 активная запись вставка или обновление - PullRequest
3 голосов
/ 21 февраля 2012

Я новичок в рельсах.

Есть ли простой способ в активной записи передать ей хэш данных и, если запись существует, обновить ее, а если нет, создать ее?

data = {}
data["my_id"] = 356345
data["description"] = "test123"

w = Descriptions.new(data)

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

Ответы [ 2 ]

11 голосов
/ 21 февраля 2012

Если вы хотите, чтобы бит my_id был уникальным, вы можете запустить

Descriptions.find_or_create_by_my_id(data["my_id"]).update_attributes(data)
0 голосов
/ 21 февраля 2012

Объект ActiveRecord в Rails сохраняет свою идентичность в параметре ID. Если идентификатор установлен, Rails будет знать, чтобы обновить запись в базе данных с этим идентификатором.

save фактически является основным способом создания, обновления или любого сохранения объекта в базе данных. Другие методы, такие как update_attributes, являются просто сахаром, который использует save в своей основе.

Да, есть много хороших вещей, которые вы получите ModelName.find_or_create_by_name("Summer")

Но если вы передадите Id в методе save, который будет обновлен, а если идентификатор не будет передан, будут create данные.

Всегда, первичный ключ в Rails должен быть «id», но вы использовали «my_id», что также может быть проблемой.

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