Rails 3, как получить идентификатор текущей записи в after_create
Как сказано в названии, я пытаюсь получить идентификатор только что созданной записи, я пытался получить ее в консоли, но идентификатор равен нулю.
Вот печать, которую я получил в консоли в начале after_create
<Unit id: nil, uuid: "9f11be13-8d07-4471-a3bb-f87943966bbd", organization_id: 33, property_id: 430, door_number: "3", created_at: "2014-12-05 13:27:57", updated_at: "2014-12-05 13:27:57", deleted_at: nil, size: "5 1/2", door_number_int: 3, leases_count: 0, tasks_count: 0, notes: nil, state_id: 68, state_tasks_count: 2, current_lease_id: nil, next_lease_id: nil, state_tasks_serie: 1, state_tasks_serie_count: 2, price_asked: #<BigDecimal:7fc79162cb80,'0.123E3',9(18)>, availability_date: nil, comments_count: 0>
Есть ли способ получить доступ к идентификатору записи?
Это то, что я пытался до сих пор
after_create
self.save
end
before_save
if self.id.present?
# do stuff
end
end
Это не очень красиво, но это работает
Чтобы ответить @MarekLipka: это не вызывает бесконечный цикл, потому что запись создается только один раз.
Я также пытался использовать:
after_create
reload
# do stuff if self.id
end
но это не похоже на работу.
Как сказал @PauloFidalgo, я не могу получить идентификатор, кроме как в методе after_save. Хотя мне странно, что я могу получить его во втором before_save (вызванном сохранением в after_create).
1 ответ
id
назначается только на save
на create
вы просто создаете каркасный объект и даете некоторые значения.
Чтобы получить идентификатор объекта, просто вызовите object.id
Если по какой-то причине вы хотите получить идентификатор в методах after_*, вам нужно использовать after_save
:
after_save {id = self.id}
Вы также можете выделить идентификатор при создании, но вам нужно запросить базу данных и установить значение в переменной. Для этого вам нужно использовать последовательность в базе данных для установки идентификаторов.