Ruby on rails 如何使rails动作以锚定的形式进行?
在rails 4.1.5应用程序中,Ruby on rails 如何使rails动作以锚定的形式进行?,ruby-on-rails,ruby-on-rails-4,anchor,rails-routing,Ruby On Rails,Ruby On Rails 4,Anchor,Rails Routing,在rails 4.1.5应用程序中,views/posts/new.html.erb在实际表单之前包含一些内容。因此,我希望new操作转到posts/new#form_id,其中form元素的id是form_id 我如何做到这一点 我看到过一些帖子建议使用锚定进行重定向:“form_id”,但由于我会从同一个操作调用它,所以我会进入重定向循环 我也考虑过在路由中改变这一点,但是路由DSL对“#”有着特殊的意义 更新1: 我可以想出两个选择: a) 在操作中重定向: views/posts/new
views/posts/new.html.erb
在实际表单之前包含一些内容。因此,我希望new
操作转到posts/new#form_id
,其中form元素的id是form_id
我如何做到这一点
我看到过一些帖子建议使用锚定进行重定向:“form_id”,但由于我会从同一个操作调用它,所以我会进入重定向循环
我也考虑过在路由中改变这一点,但是路由DSL对“#”有着特殊的意义
更新1:
我可以想出两个选择:
a) 在操作中重定向:
views/posts/new.html.erb
def new
@post = Post.new
if params[:anchor] == 'form_id'
render 'new'
else
redirect_to new_post_path(anchor: 'form_id')
end
end
事实证明这是行不通的,因为1)锚点在服务器上不可用,2)没有锚点,使用锚点重定向到路由将继续返回到同一个操作处理程序
b) 在管线中,覆盖“新建”和“编辑”以附加定位标记-类似于:
routes.rb
资源:员额可以
获取“新”,至:“新#表单id”
获取“新建”,至:“编辑#表单_id”
结束
但是b不起作用,因为在这种上下文中,“#”被解释为controller#action
更新2:第三个选项:在页面上使用ajax:
我尝试了以下两种AJAX选项,在这两种情况下,它都会跳转到锚标记,但它不会将标记与页面顶部对齐(表单显示在页面的中间)-即使表单上方至少有两页内容,表单也会显示为与顶部不对齐:
2a
$(文档).load(函数(){
$('html,body')。设置动画({
scrollTop:$(“#表单标题”).offset().top
}, 2000);
});
};
2b
$(文档).load(函数(){
window.location=window.location.href+“#表单标题”;
};
“我会进入重定向循环”是什么让你这么想的?=)对不起,我以前从未使用过动作中的锚。该操作将如何显示:如果锚点=='form\u id'呈现'new',否则重定向到new\u post\u路径,锚点:'form\u id'。它是params[:anchor]吗?我在手机应用中打字。稍后将在计算机上尝试并更新。根据下面的链接,我无法访问服务器端的锚-如果是这种情况,我如何避免重定向循环只有从该端点重定向时,重定向循环才可能。是吗?是的,我希望“posts/new”操作重定向到posts/new#form_id
。
<script>
$(document).load(function() {
$('html, body').animate({
scrollTop: $("#form-header").offset().top
}, 2000);
});
};
<script>
$(document).load(function() {
window.location = window.location.href + '#form-header';
};