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

时间:2010-07-30 14:30:31

标签: ruby-on-rails

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

media.save

@attachment.media = Media.find(????)
@attachment.save

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

4 个答案:

答案 0 :(得分: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

通常,如果记录保存正确,则media.errors.full_messages将为空数组。

如果没有错误,那么您的某个before_after_过滤器可能会返回false并阻止其保存,但这种情况不常见。

答案 1 :(得分:2)

为什么不执行以下操作?

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

media.save

@attachment.media = media
@attachment.save

答案 2 :(得分:1)

为什么不使用通过关联获得的build_xxx方法?

@attachment.build_media(params[:media])
@attachment.save

答案 3 :(得分:0)

我认为这个媒体对象无效,因此尚未保存。

如果它已保存,您将设置media.id。