开发者

Ruby on Rails: how do you get the ID of an object instantly after it's been created?

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

media.save

@attachment.me开发者_Python百科dia = Media.find(????)
@attachment.save

I tried just doing media.id but apparently, that is the media that hasn't been saved to the db yet.... so how do I get the ID?


If media.id is not assigned, you probably had an error when saving and media.save returned false, though since you don't check for it you didn't notice.

The way to avoid this is to request the stricter save:

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

  media.save!

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

  render(...)
end

Generally if a record saves correctly, then media.errors.full_messages will be an empty array.

If there are no errors, then it is possible that one of your before_ or after_ filters returned false and prevented it from being saved, though this is less common.


Why not just do the following?

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

media.save

@attachment.media = media
@attachment.save


Why not use the build_xxx methods you get via the association?

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


I suppose this media object is not valid, thus has not been saved.

If it would be saved, you would have media.id already set.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜