說我正在寫我的控制器中的一個動作。Rails:將動作分成幾塊
雖然它有很多邏輯:幾個if語句,也有案例。
有沒有辦法可以將這些邏輯分組,例如,我希望所有的if
語句都在一個文件中,並且case
語句在另一個文件中。所以在我的控制器中,我不必編寫大量的代碼,我只需調用包含這些語句的文件即可。像在HTML
我們使用script
標籤包含JS
文件
也許其他行動也可以在將來使用這些文件。
說我正在寫我的控制器中的一個動作。Rails:將動作分成幾塊
雖然它有很多邏輯:幾個if語句,也有案例。
有沒有辦法可以將這些邏輯分組,例如,我希望所有的if
語句都在一個文件中,並且case
語句在另一個文件中。所以在我的控制器中,我不必編寫大量的代碼,我只需調用包含這些語句的文件即可。像在HTML
我們使用script
標籤包含JS
文件
也許其他行動也可以在將來使用這些文件。
您的控制器的操作不應該包含該量的業務邏輯。有許多可能的解決方案:
您可以將您的邏輯到模型層,採用model concerns共享邏輯之中車型
蒸餾的你行動的邏輯分成幾個可重複使用的方法,然後將這些方法到您的ApplicationController
,以便它們可以被任何繼承自您的ApplicationController
的控制器重複使用。
介紹一個controller concern,包含相關邏輯分塊成方法,以及包括,在需要訪問邏輯控制器的關注。
從移動稍微遠離內置的Rails的慣例,你可以介紹你可以實例持有業務邏輯的可重複使用的斑點不一定適合你的模型層「服務」的對象層。
這些通常被稱爲「服務」或「操作」,分別位於app/services
和app/operations
。就代碼結構而言,這些將是簡單的類,它們接受來自控制器的輸入,在模型層上執行復雜的操作,然後將輸出提供給控制器,以便將其呈現給用戶。
在一個名爲TrailBlazer的項目中定義了一組額外的Rails約定,它們可能是一個有用的模板,可用於爲您自己的服務/操作層建模。
我們不知道控制器中的確切邏輯,但通常在其中包含邏輯是一種不好的做法。您應該將所有業務邏輯委託給模型。
從你的控制器你應該只處理HTTP相關的事情,並委託給正確的模型。
假設這個形式給出了不適合你,你也可以使用ActiveRecord Concerns,他們是非常有用的乾燥,讓您包括reutilizable代碼
小片段。如果這甚至不符合您的要求,你可以把一些.rb
文件app_folder/lib
,它通常是自動加載的,你也沒必要要求它手動
,如果你發佈你的控制器的代碼,這將是非常有用的,這會給我們的美好憧憬你正在嘗試做的