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和数据属性 例如,在我的应用程序中,我有一个大表单,其中包括一个“地址”字段集,用户应该:
- 写下他的地址,然后
- 点击“检查”按钮,显示一个小谷歌地图,看看他输入的地址是否正确李>
<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 |```