在Rails中理解单一资源存在问题



我很难理解Rails中的奇异资源是如何工作的。

特别是,当我跨会话访问Rails应用程序时,Rails如何知道哪个单数属于我;当有很多用户时,Rails应用程序如何确保没有冲突?

服务器是否以某种方式映射请求(基于IP)到唯一的Rails进程?每个进程对应一个单一的IP,当一个以前未知的IP连接一个新的Rails进程开始?

如果是这样,我怎么可能在同一台机器上作为多个用户(使用不同的浏览器)登录?

如果Webrick是单线程的,我怎么可能在运行Webrick的本地主机上使用多个单一资源进入多个会话?

任何我能读到的资源的解释或链接都很感激。

唯一的单一资源所做的事情是更改Rails设置的路由。因此,它基本上从您的路由中删除了所有的:id(并且它删除了index路由,因为它对单个资源没有意义,现在与show路由相同)。

Rails没有为单一资源做任何神奇的事情,没有。需要在你的应用程序中处理这个问题。你通常会通过使用会话来存储id来做到这一点。你的会话将它发送给浏览器的cookie映射到Rails存储在文件、DB或memcache中的会话实例,因此服务器上的多个应用进程都使用公共会话存储。

因此,例如-在用户登录后,您将在会话中存储他的user_id,并且您将在您的单一资源(以及需要它的所有其他控制器)的控制器中拥有before_filter,该控制器从会话中检索user_id并使用标准ActiveRecord查找器检索User记录。

如果你想作为多个用户登录,那么你需要某种范围/名称空间标识符以及user_id,但实际上最好使用这里的认证宝石之一-其中许多都有某种范围机制。

最新更新