Ruby on Rails:在控制器中将两个东西保存到数据库中

时间:2010-11-15 05:30:53

标签: ruby-on-rails ruby activerecord

我的'Message'控制器中的'create'功能是这样的:

  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")

无论出于何种原因,都无法保存message2,但@message可以保存。我相信这是因为你只需要保存一个名为@message的变量,但我无法弄清楚如何解决这个问题。我需要在这个保存中将多个内容保存到数据库中 - 还有其他方法可以做到这一点,还是我完全错了?

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

没有理由你不能在动作中多次保存,但为什么你想做这样的事情是值得商榷的。您需要将保存放在事务中,以便只在两个记录都有效时保存。保存失败时,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