2009-10-22 44 views
2

我不知道這是否是錯誤的形式,但我需要設置一個文件路徑,以供控制器中的操作中的所有對象訪問。控制器中的一個動作會創建一個文件並將其存儲在路徑中。另一個操作使用send_file來提供文件。我一直在存儲變量的唯一地方是模型中的一個對象。然而,將URL存儲在第一個對象中似乎很愚蠢,或者將url複製到所有對象上。什麼是最好的方法來做到這一點?Rails中的控制器中的任何東西都可以訪問的變量

我希望這很清楚。

回答

1

您可以在您的應用程序控制器中創建一個返回路徑的方法。這個方法將在整個控制器中可用。不知道這是否是「最佳實踐」,但它適用於我。

6

如果這是一個特定於站點用戶的文件路徑,那麼每個用戶都有不同的路徑,您可以將它存儲在會話中。

session[:file_path] = generate_file! 

...用戶進入到下一個頁面...

send_file session[:file_path] 
+0

我刪除了我的答案並給了+1。我沒有想過每個會話有不同的文件,但這顯然會成爲這個方法很好解決的問題。 – jdl 2009-10-22 20:46:02

+0

它只對管理員用戶(只有一個管理員),所以我不必擔心每個用戶......這種方法仍然最適合這種情況? – 2009-10-23 19:42:50

+0

應該是。任何其他只適用於一個用戶的方法可能會更復雜。將文件路徑放在請求參數中存在安全風險,所以不要這樣做。 – cwninja 2009-10-23 23:08:14

0

問題的答案取決於你的背景。這裏有一些通用的建議:

如果每個模型有一個文件,那麼您需要在每個模型上存儲一個路徑。

如果有幾個模型共享一個文件,但是您的對象關聯於層次結構,則需要將其存儲在「父對象」 - has_many其他對象之一。其他對象將不得不做self.parent.file_path。

最後,如果有幾個非相關模型使用了一個文件,那麼我不知道該建議什麼,除非可能有更好的方法來組織模型。

你試圖存儲什麼對象,以及它們之間有什麼關係?

相關問題