有幾個地方我可以做我所需要的東西,但我不確定哪裏最好的地方符合良好的做法。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