如何使Rails呈现视图并自动向下滚动?

时间:2011-01-29 22:03:41

标签: ruby-on-rails

我有一个令人讨厌的大型目标网页,其中间有一个注册表单。如果我提交表单并且验证失败,我想再次渲染着陆页,但我希望将其向下滚动到注册表单,以便他们可以看到错误并进行编辑。可以使用render方法跳转到表单,还是需要执行redirect_to "account/new#theFormID"

我宁愿不做重定向,因为你必须在会话中保存表单信息,重新填充表单,等等,我想坚持传统

if @resource.save then redirect_to ...
else render "new"
end

5 个答案:

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