Ruby on rails Rails 3如何在创建后获取当前记录ID

Ruby on rails Rails 3如何在创建后获取当前记录ID,ruby-on-rails,ruby-on-rails-3,activerecord,after-create,Ruby On Rails,Ruby On Rails 3,Activerecord,After Create,正如标题所说,我试图获取我刚刚创建的记录的ID,我试图在控制台中获取它,但ID为零 这是我在创建后的一开始在控制台中得到的self的打印 <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 1

正如标题所说,我试图获取我刚刚创建的记录的ID,我试图在控制台中获取它,但ID为零

这是我在创建后的一开始在控制台中得到的self的打印

<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>
它不是很漂亮,但很管用

回答@MarekLipka:它不会导致无限循环,因为记录只创建了一次

我还尝试使用:

after_create
   reload

   # do stuff if self.id
end
但这似乎不起作用


就像@PauloFidalgo所说的,我无法获取id,除非使用after_save方法。虽然对我来说很奇怪,我可以在保存之前的第二秒获得它(由创建之后的保存触发)

仅在
save
上分配
id
,在
create
上,您只是创建骨架对象并给出一些值

要获取对象的id,只需调用object.id

如果出于某种原因,您希望在after_*方法中获取id,则需要使用
after_save

 after_save {id = self.id}

您也可以在create中分配一个ID,但需要查询数据库并在变量中设置值。要实现这一点,您需要使用数据库中的序列来设置id。

仅在
save
上分配
id
,在
create
上,您只是创建骨架对象并给出一些值

要获取对象的id,只需调用object.id

如果出于某种原因,您希望在after_*方法中获取id,则需要使用
after_save

 after_save {id = self.id}

您也可以在create中分配一个ID,但需要查询数据库并在变量中设置值。要实现这一点,您需要使用数据库中的序列来设置id。

我这里的问题是,我需要修改实际记录上的一些值。这就是为什么我要在赛前做这件事。但是,为了将一个新记录与另一个元素关联起来,我想在创建并完成我的工作后获得ID。另外,如果我在after_save中保存记录,它将导致无限循环。如果after_create没有保存记录,我怎么会在after_create调用的before save中获得我的id?@Incognito,所以你想在创建或编辑记录时更改关联?事实上,我想复制与某个单位关联的某个记录,关键是,我创建了一个模板单元,当用户创建的是自己的模板单元时,它会复制默认的关联,这就是为什么我要尝试它。但是在执行self.tasks时,我仍然会给你答案,因为在你回答完所有问题后,我无法获得记录的id,除非在after_save:)中。我这里的问题是,我需要修改实际记录的一些值。这就是为什么我要在赛前做这件事。但是,为了将一个新记录与另一个元素关联起来,我想在创建并完成我的工作后获得ID。另外,如果我在after_save中保存记录,它将导致无限循环。如果after_create没有保存记录,我怎么会在after_create调用的before save中获得我的id?@Incognito,所以你想在创建或编辑记录时更改关联?事实上,我想复制与某个单位关联的某个记录,关键是,我创建了一个模板单元,当用户创建的是自己的模板单元时,它会复制默认的关联,这就是为什么我要尝试它。但在执行self.tasks时,我仍然会给您答案,因为在您回答完所有问题后,我无法获取记录的id,除非在after_save:)