我目前有这个片段:
edit_case_path(@case, {:name => @case.name})
生成如下路径:
/cases/4/edit?name=johnson
但是为了让用户更容易看到它,我希望我的道路是这样的:
/cases/4/edit?asdfjhsdfiojpasfdoj
其中asdfjhsdfiojpasfdoj
基本上是某种编码(base64?),可以解码为name=johnson
。
如何使用_path
帮助程序执行此操作?
答案 0 :(得分:2)
我不认为使用路径助手可以做到这一点,但是你可以这样做:
edit_case_path(@case, {:q => base64_encode({:name => @case.name})})
有一个帮手,如:
require 'base64'
def base64_encode(args)
Base64.encode64(args)
end
然后在你的控制器中:
args = Base64.decode64(params[:q])
http://ruby-doc.org/stdlib-2.1.2/libdoc/base64/rdoc/Base64.html
答案 1 :(得分:1)
Base64不会真正保护你免受任何伤害。此外,我不认为您可以将URL编码到客户端。但如果要点是不让他在浏览器中看到URL,则应该使用HTTP POST方法而不是GET。 POST在请求正文中而不是在URL字符串中发送相同的参数。您可以在路径文件中配置它。
答案 2 :(得分:1)
<强>路线强>
要进一步Tiago Farias
的回答,我会问你为什么要尝试在这样的路线中传递一个参数呢?
Rails在resource-based structure上运行(特别是在其路线上),这意味着如果您正在加载edit
路由,则此 应加载{{ 1}},对吧?
我根本不明白为什么您必须将参数传递给resource
操作 - 肯定是edit
操作,您可以编辑< / em>资源/对象。在这种情况下,您可以从资源本身填充edit
属性
-
<强>助手强>
如果你想像你一样使用路径助手,我认为你如何传递参数没有问题(从功能的角度来看)
如果你想&#34;编码&#34;在某种程度上,您最好使用name
之类的编码模式(由base64
推荐)。问题不在于&#34;我如何创建路径&#34; ,但&#34;如何创建编码的参数?&#34;
如果您想传递参数,可以使用所描述的Taryn East
方法:
link_to