有几个地方我可以做我所需要的东西,但我不确定哪里最好的地方符合良好的做法。Rails最佳实践 - 此代码应该放在哪里?
我有一个订单控制器,创建成功的订单后,我想创建一个订阅(但仅当订单成功时)以及推荐(但只有当订单与一个订单关联时)。
现在明显的选择是在订单模型上使用after_create ...但是...我如何获取会话数据? (推荐ID,朋友ID和凭证ID仅在会话中,因为不需要将它们存储在订单数据库中)。
所以我应该只是在创建操作中创建订阅和引用对象(我如何在创建操作中)或者是否有更好的方法?
这里是我创造的动作: (@ 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
任何帮助,将不胜感激 - 我真的想,所以我希望没有人做这个正确我想问问什么可能是一个简单的问题。
嗨,谢谢 - 虚拟属性似乎是一个有趣的方式去做。以这种方式使用它们有什么缺点吗? – eBrooker 2012-02-29 23:17:00
我真的没有。这看起来很自然,也允许你使用回调。 – Spyros 2012-03-01 01:47:27
对不起,因为我没有足够的积分或者其他东西,我不能'回复'你的答案。无论如何,我会结合您的建议,将所有内容都转移到模型中,并使用虚拟属性来获取参数。不幸的是我不能使用回调方法,因为创建新对象的属性之一只能在update_attribute发生后才能访问,直到创建Order之后才会调用它(这是我第一篇文章中的.purchase方法的一部分) 。谢谢你的答案! – eBrooker 2012-03-01 03:08:07