我目前有:
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操作成功(保存和发送),我只会给成功闪存 *如果一个操作失败,则不应执行任何操作(或者应该回滚保存)。
我没有经验,有人知道我应该怎么写吗?
答案 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中的“异常处理和回滚”部分。你可能需要玩游戏。