2011-08-04 70 views
4

我已經構建了一個非常簡單的Rails應用程序......您將請求發送到某個網頁,它會自動生成一個報告並將其保存到本地服務器上的文件中。生成的報告默認爲當天創建。我想要做的是允許用戶在url中輸入日期,他們希望生成報告,以便將我的小技巧小馬變成更有用的東西。需要一些關於Rails方式的事情的建議

現在我已經將所有有用的報告生成代碼構建到家庭控制器的索引操作中,但不禁感覺它真的屬於模型而不是控制器,但是我我不太清楚如何實現這一轉變。

任何意見來自你經驗豐富的鐵軌獸醫將不勝感激。

謝謝。

我的索引操作中的代碼.... 基本上索引操作get被調用,我的程序計算出它是哪一天,然後使用日期向另一個API發出請求,然後返回其中的必要信息物體的形式。然後,我簡單地瀏覽該對象,收集我需要的信息並生成一個包含該信息的文本文件。家庭控制器的視圖只是打印一條消息,說明報告已經生成並提供了路徑。

我想強調一下,我想使用像mysite.com/report/20110803這樣的網址爲我的控制器提供有關報告運行日期的信息。

+2

你能告訴我們在你的索引行動的代碼?如果你向我們展示你的代碼,你會得到更具體/更好的建議。 – Mischa

+0

@mischa我試着添加一些關於代碼 – Bnjmn

回答

2

您正確地認爲此代碼屬於模型。理想情況下,報告模型。控制器通常應該只給實例變量提供視圖,處理flash消息等等。邏輯應該在模型中。

這就是說,我會這樣做:創建一個模型方法,生成你想要的報告。然後,在控制器中執行該方法,並根據傳入模型方法的時間戳取回想要的報告。

然後,將有此控制器:

redirect_to new_report_url, :stamp => the_stamp_value 

我覺得你的想法。你只需要一個簡單的路線,期望一個郵票的價值,你很好去:)

+0

的更多解釋以解決路由問題,我會將這些報告聲明爲routes.rb文件中的資源嗎? – Bnjmn

+2

您應該將其移出** HomeController **並創建一個** ReportsController **,其中包含標準RESTful路由(只包含您需要的路由),然後您可以在路由中執行「resources:reports」。 rb文件。如果你只在** ReportsController中有'create','index'和'show'動作,那麼你可以只添加'resources:reports,:only => [:create,:index,:show]'for例。 – iwasrobbed

+1

+1 iWasRobbed說得對。學習如何手動編寫路線是個好主意。這很容易,並且瞭解後臺路由中究竟發生了什麼是值得的。 – Spyros