2016-05-31 74 views
0

在我的項目中,用戶正在上傳需要閱讀的文本文件。Rails - 通過HTTP請求保存控制器實例變量數據

文件,可以是任何大小,我使用的文件是1 MB,並有1500行左右。該文件也可以更大。因此,而不是把所有的數據庫,我想到處理文件,並保留在實例變量的數據。

但實例變量在HTTP請求中不可用。 因此,我可以通過HTTP請求保留實例變量值有哪些選擇。不選擇數據庫的其他原因是,我不需要數據持久化。只要用戶登錄,數據就需要在該時間段內存在。一旦用戶註銷,我可以丟棄數據。

如果您需要更多信息,請讓我知道。

+0

你試過https://rubygems.org/gems/request_store? – imechemi

回答

1

由於@xyious建議,我會說避免在會話中存儲那麼多的數據,這不是一個好習慣。你可以,但是,請執行下列操作:

  1. 設置保存您存儲臨時文件的路徑,在這種情況下,全系統的配置設置,用戶
  2. 上傳的文件生成一個隨機的(也許與SecureRandom.hex)文件名當用戶上傳文件並將該文件存儲在點#1提及的路徑中
  3. 將該隨機文件名存儲在用戶會話中,即使您在請求之間更改,仍然可以訪問文件名
  4. 在每個請求中,無論何時需要處理數據,從用戶會話中拉出文件名並加入#1的設置路徑,從文件系統中讀取文件並根據需要進行處理
  5. 在登錄/會話控制器上添加回調,以便用戶註銷時可以找到文件名並將其刪除註銷,這樣你就不會保留未使用的文件
0

我會提出反對,但可以將數據存儲在會話變量或cookie中。
爲什麼在用戶登錄時需要存儲多少數據?是否可以保存重要的位?

0

使用實例變量來存儲內容是不正確的方法,因爲你沒有上傳文件大小的限制,你最終通過數據每次。

首先,由於您希望來自用戶的文本文件決定大小限制,然後臨時使用數據庫中的參考路徑上傳文件。該文件可以在需要時進行清理,並使訪問內容簡單。爲了進一步改善這一點,啓用緩存機制併爲上傳的文件設置緩存服務器。

如果你對這個不太好,那麼我能想到的其他選擇是使用已經建議的會話變量。所以這些數據將保留在每個會話中,符合您的要求。你可以只是session[:file_Data] = "put parsed content here"

相關問題