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}

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

Другие вопросы по тегам