Ruby on Rails: сохранение двух вещей в базе данных в контроллере - PullRequest
0 голосов
/ 15 ноября 2010

Моя функция 'create' в моем контроллере 'Message' выглядит примерно так:

  def create
    @message = Message.new(params[:message])
    @message2 = Message.new(params[:message])
    @message.sender_deleted = false
    @message2.sender_deleted = true    
    if @message2.save
       ...
    else
        logger.debug("SAVE DIDN'T WORK")

По любой причине сообщение2 не может быть сохранено, но @message может. Я считаю, что это потому, что вам нужно сохранить только переменную с именем @message, но я не могу понять, как обойти это. Мне нужно при этом сохранить несколько вещей в базе данных - есть ли другой способ сделать это или я делаю это совершенно неправильно?

Спасибо за вашу помощь

1 Ответ

3 голосов
/ 15 ноября 2010

Там нет причин вы не можете сохранить больше, чем когда-то в действии, хотя почему вы хотите сделать такую ​​вещь спорно.Вы захотите поместить сохранения в транзакцию, чтобы сохранить только тогда, когда обе записи действительны.save! вызовет исключение при сбое сохранения.

def create
  @message = Message.new(params[:message].merge(:sender_deleted=>false))
  @message2 = Message.new(params[:message].merge(:sender_deleted=>true))
  Message.transaction do
    @message.save!
    @message2.save!
  end
  redirect_to .... # handle success here
rescue ActiveRecord::RecordNotSaved, ActiveRecord::RecordInvalid
    # do what you need to deal with failed save here,
    # e.g., set flash, log, etc.
    render :action => :new
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...