以下链接
<%= link_to "Login to comment", :url => new_session_url(:return_to => request.request_uri, :anchor => 'commentForm'), :method => :get, :html => { :id => 'login_to_comment'} %>
生成以下网址:
http://localhost:3000/session/new?return_to=%2Fnature_photos%2Fsdfds#commentForm
,日志中的参数如下。
Processing SessionsController#new (for 127.0.0.1 at 2009-07-16 02:04:44) [GET]
Parameters: {"return_to"=>"/nature_photos/sdfds", "action"=>"new", "controller"=>"sessions"}
Completed in 74721ms (View: 15, DB: 0) | 200 OK [http://localhost/session/new?return_to=%2Fnature_photos%2Fsdfds]
这里我需要#commentForm锚从参数return_to
中排除我需要获取该值以向下滚动到页面底部的评论表单。
答案 0 :(得分:3)
由于#
未转义,锚#commentForm
实际上是网址/session/new?return_to=...
的一部分,不属于网址/nature_photos/sdfds
(在查询字符串中以return_to
的值给出)。这是因为您使用:anchor
中的new_session_url
选项:它会将锚点添加到完整的网址中。请注意,永远不会将锚发送到服务器!
您可能正在寻找以下内容:
:url => new_session_url(:return_to => request.request_uri + "#commentForm"), ...
这会将锚点直接附加到return_to
值的网址,这意味着#
字符应该被URI转义为%23
。当它作为参数return_to
发送回服务器时,它将被取消转义,您可以再次将其用作常规URL。