2012-07-05 85 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