2012-07-05 69 views
0

我有这样的形式:隐藏或加密形式PARAMS 3

<%= form_tag posts_path, :method => :get, :class => "search_nav" do %> 
    <%= text_field_tag :search, params[:search], :class => "input-long search-query", :placeholder => "#{t('.search_nav')}" %> 
    <%= hidden_field_tag('ip', "#{request.ip}") %> 
    <%= hidden_field_tag('city', "#{request.location.city}") %> 
    <%= hidden_field_tag('country', "#{request.location.country}") %> 
    <%= content_tag(:div, "",:class => "icon-search") %> 
<% end %> 

我得到一个URL是这样的:

http://localhost:3000/en/posts?utf8=%E2%9C%93&search=check+params&ip=127.0.0.1&city=&country=Reserved 

我的问题是:

我可以隐藏或者加密url params ip, city and country

我不能使用POST因为我有分页显示的结果:

<a rel="2" href="/en/posts?city=&country=Reserved&ip=127.0.0.1&page=2&search=check+params&utf8=%E2%9C%93">2</a> 
<a rel="3" href="/en/posts?city=&country=Reserved&ip=127.0.0.1&page=3&search=check+params&utf8=%E2%9C%93">3/a> 
+4

为什么你需要将这些隐藏的字段添加到表单中?它们都是请求对象的一部分,因此您可以直接从处理表单提交的控制器操作中访问它们。 – Teoulas 2012-07-05 15:35:26

+0

你的回答是正确的。我可以在我的控制器上获得ip,城市和国家。谢谢! – hyperrjas 2012-07-05 15:57:52

回答

2

加密URL参数是非常没有意义的。你为什么不希望用户看到这些值?当然你可以在将它们添加到表单之前对它们进行加密,但这是否真的有必要?

此外,也许更重要的是,如果这些值是基于请求的,那么您很有可能不需要首先提交它们。结果页面上的#{request.xxx}将与表单页上的相同。有什么好的理由可以传递这些信息吗?通过将这些参数提交为GET参数,您实际上将冗余信息发送到服务器。当加载下一页时,Ruby/Rails已经基于IP地址自动计算这些值。

这里的问题不在于形式,而在于设计逻辑。我认为你可能过分分析了你的情况,需要退后一步并重新考虑这个问题。

+0

谢谢,但这是正确的@Teoulas评论我不需要在我的形式获得IP,国家和城市。我可以在我的控制器中得到这个参数。谢谢! – hyperrjas 2012-07-05 15:58:49