Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使rails动作以锚定的形式进行?_Ruby On Rails_Ruby On Rails 4_Anchor_Rails Routing - Fatal编程技术网

Ruby on rails 如何使rails动作以锚定的形式进行?

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

在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.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';
 };