我无法理解Rails中奇异资源的工作原理。
特别是,当我在会话中访问Rails应用程序时,Rails如何知道哪个单数属于我;当有很多用户时,Rails应用程序如何确保没有冲突?
服务器是否以某种方式将请求(基于IP)映射到唯一的Rails进程?每个进程对应一个IP,当一个以前未知的IP连接时,新的Rails进程启动了吗?
如果是这样,我怎么可能在同一台机器上以多个用户(使用不同的浏览器)登录?
如果webrick是单线程的话,我怎么可能在运行Webrick的localhost上使用多个奇异资源进入多个会话?
我赞赏任何可以阅读的资源说明或链接。
答案 0 :(得分:2)
奇异资源所做的唯一事情是改变Rails设置的路由。因此它基本上会删除路由中的所有:id
(并且它会丢弃index
路由,因为它对于单个资源没有任何意义,现在与show
路由相同。
Rails对单一资源没有任何神奇的作用,没有。 你需要在你的应用中处理这个问题。您通常会使用会话来存储ID。您的会话将发送到浏览器的cookie映射到Rails在文件,数据库或类似memcache中存储的会话实例,因此服务器上的多个应用程序进程都使用公共会话存储。
因此,例如 - 在用户登录后,您将user_id
存储在会话中,并且您将在单一资源的控制器中拥有before_filter
(以及所有其他控制器)那需要它)从会话中检索user_id
并使用标准的ActiveRecord查找器检索User
记录。
如果您想以多个用户身份登录,那么您需要某种范围/命名空间标识符以及user_id
,但实际上最好使用one of the authentication gems here - 其中许多有某种范围机制。