2016-05-16 63 views
0

我想實現一個簡單的折扣優惠券。我有一個模型,可以保存有效的優惠券(除了一些其他內容)以及存儲產品功能的產品模型(名稱,價格等)。Rails:同時處理(更新)2個不同的控制器

我有一個簡單的表單,可以讓用戶輸入他的優惠券。我應該檢查它是否有效(我爲它定義了一個範圍)。如果輸入的優惠券有效,我必須更新兩個提到的表格。在第一個中,我必須將優惠券更改爲「已使用」,而在第二張表中,我應該使用新值更新價格。我想在用戶在表單中輸入一個值時執行這些操作。

你的建議和解決方案來做他們兩個?由於這兩個操作與2個不同的模型和控制器有關,所以我無法在一個控制器中訪問它們。調用方法來執行這些操作的最佳方式是什麼?你能給我一個清楚的解釋嗎?

+0

http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html – max

+1

我使用這種類型的東西的表單支持對象:https://blog.pivotal.io/labs/labs/form -backing對象換樂趣和利潤。 http://railscasts.com/episodes/416-form-objects –

+0

@ruby_newbie這不是解決方案,但值得考慮。 –

回答

2

您可以在兩個控制器中訪問這兩個模型,但要執行此操作,應該將此邏輯放在模型中。我會在您的優惠券模型中添加before_update回調函數,以檢查優惠券是否正如您所提及的那樣更改爲「used」。如果是這樣,您可以在產品表中更新其「價格」。關鍵的概念是,您可以從任何地方撥打所有型號,但不限於其各自的控制器。

+0

似乎,對我來說是一種合乎邏輯的方式! – amulous

+0

我曾想過使用活動記錄回調,但由於問題我忽略了它。在優惠券模型中如何使用before_update回調來更新產品模型的屬性?這是不可能的,也不是「軌道方式」在模型中調用控制器的動作。 –

+0

您未在模型中調用控制器操作。當您在優惠券模型中更改優惠券實例的狀態時(通過不是更新控制器操作的更新,而是您的模型中的更新方法!),您應該查找與其關聯的相關產品(仍在優惠券內部模型使用回調方法,當優惠券更新時運行)並根據需要更改其價格。 – bkunzi01

相關問題