【问题标题】:Rails - Store unique data for each open tab/windowRails - 为每个打开的选项卡/窗口存储唯一数据
【发布时间】:2011-09-27 13:48:34
【问题描述】:

我有一个应用程序,它具有不同的数据集,具体取决于用户当前选择的公司(侧边栏上的下拉框当前用于设置会话变量)。

我的客户表示希望能够在单个浏览器中同时处理多个不同的数据集。因此,会话不再削减它。

谷歌搜索似乎意味着获取或发布数据以及每个请求都是这种方式,这是我的第一个猜测。有没有更好/更容易/rails 的方法来实现这一点?

【问题讨论】:

    标签: ruby-on-rails session post tabs get


    【解决方案1】:

    您在这里有几个选择,但正如您所指出的,session 系统不适用于您,因为它在同一浏览器的所有实例中都是全局的。

    标准方法是在 URL 中添加一些内容来标识要执行的上下文。这可以像/companyx/users 这样的前缀而不是/users 一样简单,您可以在其中获取公司信息并将其用作范围。通常,您需要一个控制器基类来为您工作,然后从该基类继承所有其他将受到相同影响的控制器。

    另一种方法是将公司标识组件从 URL 移动到主机名。这在软件即服务提供商中很常见,因为它使您的应用程序分片变得更加容易。而不是myapp.com/companyx/users,您将拥有companyx.myapp.com/users。这样做的好处是可以保留现有的 URL 结构,并且当您拥有大量数据时,您可以将您的应用按客户划分到不同的数据库中,而不会让人头疼。

    您通过使用 GET 令牌或 POST 字段标记所有 URL 找到的答案不会很好地工作。一方面,它很乱,其次,每个链接都是 POST 的网站使用起来非常烦人,因为它使使用后退按钮导航或强制重新加载很麻烦。之所以看到使用,是因为开箱即用的 PHP 和 ASP 不支持路由,所以只能勉强凑合。

    【讨论】:

    • 谢谢。我建议我们将公司 slug 移到主机名中。这将比获取/发布数据更适合我们未来的需求。我知道必须有更好的方法!
    【解决方案2】:

    您可以创建一个临时数据库表,或者使用一个键值数据库并将您需要的所有数据存储在其中。 uniq 键可用作窗口 ID。此外,您必须将此窗口 ID 添加到每个链接。这样就可以从数据库中接收到每个浏览器标签对应的数据,并将其存储在会话、对象、...

    如果您有一个对象,比如说@data,您可以使用 Marshal.dump 将其存储在数据库中,然后使用 Marshal.load 将其取回。

    【讨论】:

      猜你喜欢
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多