繁体   English   中英

使用 Rails 保持前端状态

[英]Keep front-end state with Rails

我有一个 Rails 应用程序,如果用户登录,我想保存我的 div 的状态。

例如:有人登录并单击 div 以隐藏它。 我希望将其存储在某处,因此如果他再次打开该页面,该 div 仍将被隐藏。

我不想使用本地存储,因为如果我也使用移动设备或其他计算机/浏览器,我希望保存状态。 它需要在任何地方都相同,具体取决于用户。

我正在考虑在我的用户模型中将每个 div 的每个状态存储为布尔值,但是这个想法听起来一点也不干净,如果我这样做,我认为我晚上无法入睡

任何的想法? 我认为 React/Redux 会很容易处理(也许不是,它也只是本地的?)但目前我坚持使用 Rails ..

非常感谢!

React/Redux 不会拯救你,因为除了一些方便的绑定之外,没有什么神奇的事情发生。 在幕后,他们使用相同的“浏览器功能”。

恐怕您需要找到最适合您的折衷方案。 我会发表一些想法:

坚持使用localStorage

既然你调查过了,可能就不用在这里多说了。

绑定到 Chrome

从 Chrome 25 开始,他们就可以访问storage.sync ,您可以围绕此开发您的系统。 始终尝试检索数据(如果有),然后记住保留新数据并同步它。 也许其他浏览器支持这一点,但缺点是你也必须拥有这些代码。

使用 webRTC 进行实验

您可以使用 webRTC 在两个浏览器之间传输数据。 虽然我在这方面没有太多经验,但我不能推荐它,但这绝对是您想要考虑的一种方法。

也许检查这个项目: https : //github.com/cjb/serverless-webrtc

创建自己的存储

选择一个存储(我认为即使是 firebase/dynamodb 也可以)并构建一个系统来保存用户偏好。 如果您有 Auth0,则可以在其中保留一些逻辑,并且由于它们提供 SSO,因此检查这些自定义设置将相当容易。

请记住,由于您不想使用 localStorage,因此您需要保留会话并将此首选项保存在 user_id 或其他内容下。

在我看来,对此没有最佳解决方案,只有您想要交易的东西才能支持这一点。 如果您不介意保留整个业务逻辑,我不明白为什么为此创建存储会使其太慢。 测量负载并在此过程中进行优化。

听起来这是一种用户偏好类型的配置。 因此,您可能只需将设置存储为用户模式中的单个字段。 为此,您可以使用可序列化的哈希或 json 类型。

所以假设你有一个app/models/user.rb

添加运行迁移

rails g migration add_view_options_to_users view_options:text
rake db:migrate

将此添加到您的模型中

class User < ActiveRecord::Base
  serialize :view_options, Hash
end

然后,在你的用户控制器,你可以张贴到你的更新动作,所以你会想要一个字段添加到permitted_params

private

def permitted_params
  params.require(:user).permit(:view_options, #other options etc.)
end

从这里开始,如果您愿意,您需要编写一些 javascript 来将 view_options 发布到用户/更新或自定义路由。 但基本上每个字段的值都将保存在控制器操作中,例如:

def update
  @user = User.find(params[:id])
  opts = @user.view_options || {}
  user.view_options = opts.merge(params[:view_options])
  if @user.save
    render json: { status: true, user_id: @user.id }
  else
    render json: { status: false, errors: @user.errors.full_messages }
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM