Ruby on Rails:如何在创建对象后立即获取对象的ID?

Nul*_*uli 1 ruby-on-rails

media = Media.new(params[:media])

media.save

@attachment.media = Media.find(????)
@attachment.save
Run Code Online (Sandbox Code Playgroud)

我尝试过,media.id但显然,这是尚未保存到数据库的媒体....所以我如何获得ID?

tad*_*man 5

如果media.id未分配,则在保存和media.save返回时可能会出错false,但由于您没有检查它,因此您没有注意到.

避免这种情况的方法是请求更严格的保存:

def something
  media = Media.new(params[:media])

  media.save!

rescue ActiveRecord::RecordInvalid
  # Something couldn't be saved

  render(...)
end
Run Code Online (Sandbox Code Playgroud)

通常,如果记录保存正确,那么media.errors.full_messages将是一个空数组.

如果没有错误,那么您before_或其中一个after_过滤器可能会返回false并阻止其被保存,尽管这种情况不太常见.