我有一个令人讨厌的大型目标网页,其中间有一个注册表单。如果我提交表单并且验证失败,我想再次渲染着陆页,但我希望将其向下滚动到注册表单,以便他们可以看到错误并进行编辑。可以使用render
方法跳转到表单,还是需要执行redirect_to "account/new#theFormID"
?
我宁愿不做重定向,因为你必须在会话中保存表单信息,重新填充表单,等等,我想坚持传统
if @resource.save then redirect_to ...
else render "new"
end
答案 0 :(得分:27)
将anchor指令放在表单上,您仍然可以依赖:从控制器渲染...
form_for(@my_model, :url => { :action => "create" , :anchor => "my_anchor" })
答案 1 :(得分:4)
http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html
redirect_to profile_path(@profile, :anchor => "wall")
这就是你传递锚点的方法。
答案 2 :(得分:1)
另一件事......如果它是我实际使用的链接,你必须添加一个唯一的param
,以便浏览器认为它正在提交新内容,否则它只是刷新而不会点击服务器。我正在使用:
link_to "REFRESH", refresh_my_model_path(@my_model, :anchor => "my_anchor", :options => {:id => Time.now} )
答案 3 :(得分:1)
使用javascript?
<script>
window.location.hash="ANCHOR";
</script>
答案 4 :(得分:1)
我使用全局变量和Javascript(由Ibrahim暗示)滚动到render
的锚点。
在我的控制器上我有这个:
@anchor = "my_anchor"
render :action => "edit"
在我的页面上,我检查了我是否有一个全局的@anchor,如果有的话,请使用Javascript滚动到它:
<% if @anchor %>
<script type="text/javascript">
window.location.hash = "<%= @anchor %>";
</script>
<% end %>