Rails - 为每个打开的选项卡/窗口存储唯一数据

时间:2011-09-27 13:48:35

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

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

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

谷歌搜索似乎暗示获取或发布数据以及每个请求都是方式,这是我的第一个猜测。是否有更好/更容易/有轨道的方法来实现这一目标?

2 个答案:

答案 0 :(得分:5)

您可以在此处选择一些选项,但正如您所指出的那样,session系统对您不起作用,因为它在同一浏览器的所有实例中都是全局的。

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

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

您使用GET令牌或POST字段标记所有网址时发现的答案不会很好。首先,它是凌乱的,其次,每个链接都是POST的网站使用非常烦人,因为它使用后退按钮导航或强制重新加载麻烦。它之所以被使用是因为开箱即用的PHP和ASP没有支持路线,所以人们不得不这样做。

答案 1 :(得分:1)

您可以创建临时数据库表,也可以使用键值数据库并在其中存储所需的所有数据。 uniq键可以用作窗口ID。此外,您必须将此窗口ID添加到每个链接。因此,您可以从数据库中接收每个浏览器选项卡的相应数据,并将其存储在会话,对象......中。

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