在if条件下组合2个操作

时间:2010-06-21 00:02:38

标签: ruby-on-rails

我目前有:

if @message.save
  @message.deliver_contact
  flash[:success] = t('Your_message_successfully_sent')
  redirect_to root_url
else
  render :action => 'new'
end

在此代码中,消息首先保存在数据库中,然后发送出去(@ message.deliver_contact)。但是,如果交付失败,那么该记录已经被删除了。

我想达到这个目的: *如果BOTH操作成功(保存和发送),我只会给成功闪存 *如果一个操作失败,则不应执行任何操作(或者应该回滚保存)。

我没有经验,有人知道我应该怎么写吗?

1 个答案:

答案 0 :(得分:2)

我认为你可能正在寻找和&&运营商。 '如果两个操作数都不为零,则条件变为真。 - source。它允许你说:

if (a == true) && (b == true)
    -# only runs if both a AND b are true

要将此应用于您的示例,请执行以下操作:

if @message.save && @message.deliver_contact
    flash[:success] = t('Your_message_successfully_sent')
    redirect_to root_url
else
  render :action => 'new'
end

根据有关交易的评论,您可能需要以下内容:

 @message.transaction do
     @message.save
     @message.deliver_contact
     rescue ActiveRecord::StatementInvalid
         render :action => 'new'
     end
 end

请参阅 The Rails API - ActiveRecord::Transactions::ClassMethods中的“异常处理和回滚”部分。你可能需要玩游戏。