Rails 3如何在after_create中获取当前记录ID

Inc*_*ito 1 activerecord ruby-on-rails after-create ruby-on-rails-3

就像标题所说,我正在尝试获取我刚刚创建的记录的ID,我试图在控制台中获取它,但ID是零.

这是我在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>
Run Code Online (Sandbox Code Playgroud)

有没有办法获取记录ID?

这是我到目前为止所尝试的

after_create
   self.save
end

before_save
  if self.id.present?
    # do stuff
  end
end
Run Code Online (Sandbox Code Playgroud)

它不是很漂亮但它有效

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

我也试过用:

after_create
   reload

   # do stuff if self.id
end
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.

就像@PauloFidalgo说的那样,除了在after_save方法之外我无法获得id.虽然我很奇怪,我可以在第二个before_save中获取它(由after_create中的save保存).

Pau*_*lgo 8

id只分配上save,在create你刚创建的骨架对象,并给予一定的价值.

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

如果由于某种原因你想在after_*方法中获取id,你需要使用after_save:

 after_save {id = self.id}
Run Code Online (Sandbox Code Playgroud)

您还可以在create中分配ID,但是您需要查询数据库并在变量中设置值.要实现此目的,您需要使用数据库中的序列来设置id.