有几个地方我可以做我需要的事情,但我不确定哪个地方最好的地方符合良好做法。
我有一个Orders控制器,在创建成功订单后,我想创建一个订阅(但仅在订单成功时)和推荐(但仅当订单与一个订单相关联时)。
现在显而易见的选择是在Order模型上使用after_create ......但是......如何将会话数据导入到该模型中? (推荐ID,朋友ID和优惠券ID仅在会话中,因为不需要将它们存储在Order db中。)
那么我应该在创建动作中创建Subscription和Referral对象(如何在mo中创建它)还是有更好的方法?
这是我的创建动作: (@ order.purchase仅在付款成功时才返回true)
def create
if @order.save
if @order.purchase
Subscription.create(:order_id => @order.id, :product_id => @order.product_id)
if @order.voucher
Referral.create(:user_id => session[:friend_id], :order_id => @order.id,
:voucher_amount => @voucher_value)
end
render :action => "success"
else
render :action => "failure"
end
else
render :action => 'new'
end
end
任何帮助都会受到赞赏 - 我真的很想这样做,所以我希望没有人会问我这可能是一个简单的问题。
答案 0 :(得分:0)
使用回调会让你的生活变得轻松,你需要使用after_save
在订单模型的after_save回调中执行所有操作。请参阅rails api doc for callback here
编辑:如果会话变量不适用于模型,您可以使用post_save方法处理所有逻辑,这些逻辑也接受所有需要的参数,如
像
class Order < ActiveRecord::Base
def post_save require_attr
#create subscriptions
# create referral
end
end
答案 1 :(得分:0)
我最近有一个类似的问题,请看一下,我认为回调中的一个简单的虚拟属性也可以为你做。