[英]Rails multiple controller actions
Rails處理“多個控制器動作”的方式是什么? 在我的應用程序中,我有一個特殊的“購物車”流程,該流程對多個模型都有影響。 基本上,特殊用戶在登錄后就可以使用該流程,其流程如下:
確認后,應該發生幾件事。
同樣,系統的細節有些難以解釋,但是我的主要問題是如何在Rails中最好地實現這種功能。 其中涉及多個步驟,並且影響所有步驟的多個模型。
我一直在考慮使用某種狀態機來做到這一點。 然后,狀態機將負責在步驟或狀態之間進行轉換,並執行所需的操作。 所以我想我會有一個StateMachineController或沒有模型的東西,它將實現主要邏輯。 這有什么用嗎? 看起來Rails確實偏向RESTfull資源,但是我似乎無法想到針對RESTful這樣的方法。 謝謝。
將控制器動作視為用戶引起的事件。 此后發生的是通常應與一個或多個模型關聯的邏輯。
因此,下訂單是Order模型中的事情,激活用戶是在User模型中,發送邀請是在Invitation模型中,依此類推。 模型彼此了解並沒有錯。 當一個事件跨越多個模型時,我將一種方法放在與用戶引起的事件最相關的一種方法中,可能是諸如Order中的“ purchase”之類的方法,這就是您從Order控制器調用的方法。
因此,如果其他模型中存在對狀態的依賴關系,則在它們中創建很少的方法來進行測試(如果需要),比如activated?
在用戶中執行其他操作,例如activate
(更新用戶狀態),然后在“邀請”中“邀請”以保存與該用戶相關聯的新邀請,依此類推。 如果失敗,請確保引發異常。
一旦有了一堆不錯的粒度方法,就可以將它們捆綁在一起,甚至可以將它們包裝在Order#purchase
方法中的事務中。 就像是
def purchase(user, stuff, invitee)
Order.transaction do
begin
invitee.activate
invitation = Invitation.create! {:invitee => invitee, :stuff => stuff, :invited_by => user }
# You can't roll back an email, so do this after the others have worked without exception
invitation.send
rescue
ActiveRecord::Rollback
end
end
end
通過在事務中完成所有操作,您的數據要么全部正確,要么不正確。
這樣的東西?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.