Ruby on Rails: как получить идентификатор объекта сразу после его создания? - PullRequest
1 голос
/ 30 июля 2010
media = Media.new(params[:media])

media.save

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

Я пытался просто сделать media.id, но, видимо, это носитель, который еще не был сохранен в БД ... так как я могу получить идентификатор?

Ответы [ 4 ]

5 голосов
/ 30 июля 2010

Если 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 и не позволил сохранить его, хотя это не так часто.

2 голосов
/ 30 июля 2010

Почему бы просто не сделать следующее?

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

media.save

@attachment.media = media
@attachment.save
1 голос
/ 30 июля 2010

Почему бы не использовать методы build_xxx, которые вы получаете через ассоциацию?

@attachment.build_media(params[:media])
@attachment.save
0 голосов
/ 30 июля 2010

Полагаю, этот медиа-объект недействителен, поэтому не был сохранен.

Если он будет сохранен, у вас уже установлен media.id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...