使用_path助手时如何编码查询字符串?

时间:2014-07-24 04:13:45

标签: ruby-on-rails ruby

我目前有这个片段:

edit_case_path(@case, {:name => @case.name})

生成如下路径:

/cases/4/edit?name=johnson

但是为了让用户更容易看到它,我希望我的道路是这样的:

/cases/4/edit?asdfjhsdfiojpasfdoj

其中asdfjhsdfiojpasfdoj基本上是某种编码(base64?),可以解码为name=johnson

如何使用_path帮助程序执行此操作?

3 个答案:

答案 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