Ruby on rails Rails-render:对目标定位标记的操作?

Ruby on rails Rails-render:对目标定位标记的操作?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我希望像这样使用渲染: render :action => 'page#form' 我也试过: render :template => 'site/page#form' 那也没用。这个特定页面上的表单位于最底部,如果提交时出现任何错误,我不希望用户默认位于页面顶部。我还需要使用渲染(而不是重定向),因为我需要保留对象及其错误 如何渲染到特定的锚定标记?使用重定向\u以使浏览器能够抬头滚动到锚定: 重定向到:action=>‘page’,:anchor=>‘form’使用JavaS

我希望像这样使用渲染:

render :action => 'page#form'
我也试过:

render :template => 'site/page#form'
那也没用。这个特定页面上的表单位于最底部,如果提交时出现任何错误,我不希望用户默认位于页面顶部。我还需要使用渲染(而不是重定向),因为我需要保留对象及其错误


如何渲染到特定的锚定标记?

使用重定向\u以使浏览器能够抬头滚动到锚定:


重定向到:action=>‘page’,:anchor=>‘form’

使用JavaScript将视图移动到正确的位置。我知道没有别的办法

<script>
  window.location = window.location.href + "#form";
</script>

window.location=window.location.href+“#表单”;

未经测试,但我认为这应该有效。

相信我找到了解决方案。对于其他有此问题的人,请按如下方式指出表格:

<%= form_tag '/page#form' do %>


似乎已经解决了这个问题。

我建议使用jQuerys验证插件。根据需要验证的对象属性,您甚至可以实现自己的表单助手,使用jquery验证插件

当然,这是更多的工作,但我相信它会在未来的回报


除此之外-使用ajaxified提交并在收到响应后处理错误消息。

您可以使用不引人注目的jQuery和数据属性

例如,在我的应用程序中,我有一个大表单,其中包括一个“地址”字段集,用户应该:

  • 写下他的地址,然后
  • 点击“检查”按钮,显示一个小谷歌地图,看看他输入的地址是否正确
当然,在按下“check”(检查)按钮后,我想再次渲染表单,但使用ancor到显示地图的地址字段集

这是我的.erb模板:

<fieldset id="address" data-preview="<%= params[:preview] ? true : false -%>">    
<legend>Write you address here, then check it</legend> 
  <div class="field"> 
    <%= f.text_field :address %>
    <input id="preview-button" type="submit" name="preview" value="check">
  </div>
 </fieldset>
因此,操作编辑将在
params[:preview]
仍然定义的情况下呈现,这将把#address字段集数据预览设置为true。也就是说,这行HTML将呈现为:

现在我需要做的就是通过javascript获取信息,如果
数据预览
真的
则将窗口位置移动到
#地址
锚点。以下是我不引人注目的jQuery代码:

$(function() { var preview = $("#address").data('preview'); if (preview == true){ window.location = window.location.href + "#address"; }; }); $(函数(){ var preview=$(“#地址”).数据(“preview”); 如果(预览==真){ window.location=window.location.href+“#地址”; }; });
就这样

快速总结bobthabuilda的答案,为那些像我这样的不太聪明的人,他们最近在谷歌上搜索到了这个问题,但似乎没有掌握窍门

首先,从Rails中抽象出来,每个基本HTML
都有一个向目标页面添加锚点的选项,为了实现这一点,您基本上将锚点保留在
'action'
属性中,如下所示:

def create @obj = current_user.objs.new(params[:obj]) if params[:preview] # geocoding code, and then: render action: "edit" else #... end end
<form action="/contact#form" method="post">
  ...
</form>
<%= form_for @message, 
     :url => contact_path(@message, :anchor => 'form') do |form| %>
如此简单,您只需告诉rails将表单的操作设置为
/contact\35; form

  • 如果对使用
    form_,则有一个
    :anchor
    参数,它进入指定的
    :url
    中,如下所示:

    def create @obj = current_user.objs.new(params[:obj]) if params[:preview] # geocoding code, and then: render action: "edit" else #... end end
    <form action="/contact#form" method="post">
      ...
    </form>
    
    <%= form_for @message, 
         :url => contact_path(@message, :anchor => 'form') do |form| %>
    
    通过这种方式,rails将为HTML表单创建正确的操作,并在表单末尾添加我们的锚


  • 如果使用JQuery,请尝试设置一些仅在渲染后应用的If条件,并执行以下操作:

    $('#anchor').get(0).scrollIntoView();
    

    再读一遍。。。我不能使用重定向。我需要变量来持久化。前面有一个问题,其中包括一个克隆实现,用于在重定向中持久化对象,包括错误:这是一个很好的锚标记重定向,但没有显示错误验证。对我有效的方法是将
    :url=>{:action=>“create”,:anchor=>“form”}
    放在表单中。在我的例子中,我使用了简单的|表单,然后我把它放在:
    {:action=>“create”,:anchor=>“contact”},:html=>{:class=>'form horizontal'}do | f |%>
    非常感谢!您是如何找到它的?请注意,不需要向控制器添加任何特殊内容(当使用
    渲染时,例如在处理表单验证错误时)。使用“/page#my#anchor”作为“action”表单属性的值意味着表单将发布到“/page#my#anchor”。由于
    呈现
    不会更改响应中的url(就像
    重定向
    一样),浏览器将(非常自然地)尊重锚,即向下滚动到锚(在本例中为“我的锚”),我发现这样做有问题。我有一个索引页,它有一个搜索表单。当我第一次单击submit时,它会按预期提交,并跳转到锚。但是,再次尝试提交并不会提交表单,它只是跳转到锚。当然,您可以使用任何rails表单帮助程序,包括更复杂的内容,如:=simple_form_for@user.designe_user,url:profile_path(锚定:'delete_my_account'),方法::delete do | f |```