在一个 controller 中做处理,当出现某一条件时,转到另一个页面,我用了 redirect_to 进行跳转,我用:id=>'example', 传递参数,但是这个参数我不想让他出现在地址栏中,只想让另一个 controller 得到它,请问大家应该怎么做? 谢谢!
#5 楼 @sunzheng91 session 可以,但是不要存太多。session 记录会一直在的,占用服务器空间。最好在访问后把 session 中相应的健值清除。
重定向 就必然在地址栏能看到。你期待的又要 redirect 又要 post 是无法实现的。 这个 HTTP 协议上就不支持 所以你放 session 看起来是相对比较简单的 :)
试试 iframe。
在第一个 controller 处理后,生成的 views 包含 iframe,这个 iframe 的地址(包括了 id=>'example'的参数)去请求第二个 controller,这样就不会出现在地址栏了。
但是 iframe 内部的所有链接和表单的 target,都必须是 _top,要不然地址栏就不会变了。
上面有人说了,用 session 或 cookies 来处理:
session[:hash] = {:name => 'ruby', :type => 'lang'} 或者 cookies.signed[:hash] = {...}
这样你 redirect 之后,就可以在下一个 controller 中使用 session[:hash] 或 cookies.signed[:hash] 把那个 hash 调出来。
原理就是 rails 会把那个 hash 用 marshal 做个序列化和签名,放到 cookie 里面。所以其实你将一个 model 的 obj 塞到里面都是可以的,我用过的一个地方就是 new resource 验证失败后,把包含 error 的 model obj 塞到 cookie 里,还是跳转 resource/new 页面,这样就避免了 scaffold 那种验证失败后留在/resources/页面的情况。