簡體   English   中英

Rails - 如何臨時存儲 rails model 實例?

[英]Rails - How do I temporarily store a rails model instance?

我有一個 rails model 實例,需要在請求之間保留而不保存到數據庫中。

我正在開發的小型應用程序允許客戶使用表單來編輯實例參數,將表單提交回服務器,然后查看所做更改的預覽。 只有按下 SAVE 按鈕時,實例數據才能在數據庫中更新。

我正在考慮將這些數據存儲在 session 中,但一些實例數據可能很重——例如長整頁 html 字符串、BERT 序列化對象等。

go 的最佳方式是什么? 如果有一個通用的方法,我會很高興聽到它。

更多細節

通常,在這種情況下,沒有必要在請求之間持久化數據,因為表單數據會跟隨我們從一個請求到另一個請求。

但是,在這種情況下,我們有一個 iframe 用於預覽最近更新的數據。 數據需要以某種方式保留......以便 iframe 可以從單獨的服務器請求中獲取它。

通常,您不應該這樣做:如果您想提高應用程序的效率,請考慮使用諸如memcached / memcache-client之類的存儲來緩存相關數據。 不要使用會話。

在這種情況下,您甚至不需要存儲數據,因為表單應該每次都將其全部傳回? 您可以使用表單中的數據使預覽操作構建一個新對象,然后再次呈現該表單。

可以將其存儲在會話中,也可以將所有值放在預覽頁面的隱藏字段中。 使用ActiveRecord會話存儲,它將會話數據序列化到數據庫中的表,而不是將其保留在內存中或放入cookie中(由於cookie長度限制,這可能會徹底失敗)。

我實際上認為更好的解決方案是使用熱線渦輪流和渦輪幀

摘自turbo 文檔

Turbo 為您提供單頁應用程序的速度 web,而無需編寫任何內容 JavaScript。Turbo 可加速鏈接和表單提交,而無需您更改服務器端生成的 HTML。它可以讓您將頁面分割成獨立的框架,這可以延遲加載並作為獨立組件運行。 最后,幫助您僅使用 HTML 和一組類似 CRUD 的容器標簽進行部分頁面更新。 這三種技術將許多 web 應用程序需要編寫的自定義 JavaScript 數量減少了一個數量級。 對於剩下的少數動態位,我們邀請您使用 Stimulus 完成這項工作。

在加速 web 應用程序之上,Turbo 是從頭開始構建的,以形成混合原生應用程序的基礎。 使用標准平台工具編寫 Android 或 iOS 應用程序的導航 shell,然后按照本機導航模式無縫填充 web 中的功能。 並非每個手機屏幕都需要寫成 Swift 或 Kotlin 才能感覺原生。 使用 Turbo,您可以減少爭論 JSON、等待應用商店批准更新或重新實現您在 HTML 中創建的功能的時間。

Turbo 是一個在 TypeScript 中編寫的 language-agnostic 框架,但這個 gem 建立在這些基礎之上,以盡可能順利地與 Rails 集成。 您可以通過 Action Cable 上的 model 回調提供 turbo 更新,使用本機導航或標准重定向響應 controller 操作,並使用助手和無布局響應呈現 turbo 幀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM