什麼是Rails處理「多控制器動作」的方式?在我的應用程序中,我有一個特殊的「購物車」流程,它對幾個模型有影響。基本上,當他/她登錄時特定種類的用戶可以使用流程,並且如下所示:Rails多控制器動作
- 添加用戶。
- 這裏可以「添加用戶」。如果您瞭解Basecamp,這一步有點像將人添加到項目中。所以在這一步,我正在考慮用戶資源。
- 這裏可以爲每個以前添加的用戶「購買」東西。
- 這就像一個基本的購物車。所以,就資源而言,我正在考慮「商店」或「購物車」。
- 這是確認步驟。我再次想到這是購物車的一部分。
確認後,應該發生幾件事。
- 步驟1中添加的用戶應該以某種方式被激活。也就是說,在激活之前他們將無法登錄。
- 應在步驟2中購買訂單。
- 在步驟2中購買的「材料」是某種虛擬產品。也就是說,產品在用戶登錄時顯示爲「邀請」。這些細節並不太重要,有點難以解釋。關鍵是,確認後,應在數據庫中創建與用戶關聯的邀請。
此外,系統的細節有點難以解釋,但我的主要問題是如何在Rails中最好地實現這種類型的東西。涉及多個步驟,並影響所有步驟中的幾個模型。
我一直在想着用某種狀態機來做這件事。然後,狀態機將負責在這些步驟或狀態之間轉換,並執行所需的操作。所以我想我會有一個StateMachineController或其他東西,沒有模型,將實現主要邏輯。這是可以使用的嗎?看來Rails確實偏向於RESTfull資源,但我似乎無法想象上述類似的RESTfull方法。謝謝。
我有一個答案正在進行,但意識到它太模糊不實用。我的一般迴應是你應該保留你的模型中的狀態信息,並且在那裏確定邏輯的狀態(無論是狀態機還是簡單的流程)。這聽起來很像我的一個「邀請」過程 - 你「邀請」一個潛在的新用戶,並給他們虛擬的東西。但是他們只有在註冊並確認之後才能得到這些東西。這種流程在Devise gem中出色地完成了(我認爲有一個「invitable」模塊)。檢查出來的靈感。 –
感謝您的回覆。你對邀請系統絕對正確。實際上我使用Railscast#196作爲靈感來源,因爲我有自己的認證系統,不能/不會使用Devise(不是我認爲Devise不錯)。我的主要問題仍然是如何處理「控制多個模型」。我需要這樣一些內容:在步驟3中按下OK後:下訂單,激活用戶,發送邀請等等。因此,可能的一些操作(跨越用戶,邀請和訂單模型)在單個交易中彙總。但是,謝謝。 – Kasper