2015-05-06 110 views
0

我有一個開始在控制器中獲得大量邏輯的Rails應用程序:例如,當我創建SeatingChart時,我還需要創建一些SeatsSections。所以我把所有這些邏輯都包裝到了一個SeatingChart.transaction塊中,並在我的控制器中創建了一個方法,它執行所有解析從客戶端接收的參數的複雜邏輯,創建各種模型並確保它們相關聯,然後我稱之爲方法在我的控制器的create方法中。將模型和控制器方法重構成模塊

我應該將此方法移動到模塊中還是可以在控制器中使用?或者,也許我應該將其移入SeatingChart模型?

另一個問題是:我的一些模型有方法。他們通常是小的方法,作爲我的Ticket模型的一個示例,我有一個方法update_status,它檢查reserved_until時間是否已經過去,如果是,則更改Ticket列的一些值。像這樣的方法應該被移動到一個模塊,還是最好留給模型?

回答

3

它通常是更好地從控制器移動代碼到模型,如果在所有可能有幾個原因:

1)它是更容易測試,你可以用它代替集成測試哪一個更容易單元測試設置並運行

2)查看工作更容易。從你的irb,你可以啓動模型並調用方法來進行交互。

3)它解耦控制器邏輯。保持控制器亮起時有助於使設計更加安靜(正如您應該這樣做)。您的控制器只是他們的模型,您的意見。

如果代碼要在多個控制器中使用,那麼假設你應該將它包裝在一個模塊中(查找服務對象)是正確的。或者,如果控制器是相關的(也可以相互繼承),那麼您可以將代碼放入其中一個基本控制器中。

希望這有助於

0

我同意最好有皮包骨頭的控制器,因爲伊蘭說的原因。

從我的情況可以看出,我會投票決定你應該在一個模塊中使用該代碼,主要是因爲它允許你分開關注點。模型應該處理某種模型。如果您的代碼跨越多個模型,那麼將其放入模塊中可以保持各個模型的清潔。

0

我不確定你應該考慮使用你當前的情況下的模塊。就我個人而言,我覺得他們更適合跨不同模型/控制器的可重用方法。

在另一方面,如果你有一些SeatsSections一個SeatingChart和你有過PARAMS手動解析和創建的各種模型和協會,這裏有一些事情要對檢出讓您的生活更輕鬆。

  1. 如果創造了萬物是通過params對象進來,它的所有相關的,你應該能夠創建只是SeatingChart.create(params[:seating_chart])使用nested forms

  2. 如果你沒有得到所有從所需數據的一切表單來創建關聯,在模型上使用active record callbacks在保存之前構建所需的關聯。