1

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

这是我在 after_create 开始时在控制台中得到的 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>

有没有办法访问记录 ID?

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

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 方法,我无法获得 id。虽然我很奇怪我可以在第二个 before_save 中得到它(由 after_create 中的保存触发)。

4

1 回答 1

8

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

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

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

 after_save {id = self.id}

您也可以在创建时分配一个 ID,但您需要查询数据库并在变量中设置值。为此,您需要使用数据库中的序列来设置 id。

于 2014-12-05T15:40:24.683 回答