如何将锚添加到redirect_to:back

ume*_*ezo 9 anchor ruby-on-rails

我有一个博客应用程序,其帖子可以通过vote帖子控制器中的操作接收投票.因为我允许在索引和显示视图中redirect_to :back进行投票,所以我在投票后进行投票,如下所示.

def vote
  # voting logic goes here
  redirect_to :back
end
Run Code Online (Sandbox Code Playgroud)

这会将我重定向到正确的页面,但我想重定向到页面中的特定帖子.为此,我在帖子部分div中添加了一个识别锚点.

<div id="post_<%= post.id %>">
  <%= post.content %>
</div>
Run Code Online (Sandbox Code Playgroud)

我怎么能在我的网站上引用这个redirect_to :back?我尝试了以下,这是行不通的.

# this doesn't work!
redirect_to :back, anchor: "post_#{@post.id}"
Run Code Online (Sandbox Code Playgroud)

或者,如果我对show和index视图使用if子句,我该怎么做?我尝试了以下,返回undefined method 'current_page' for VocabsController.

#this doesn't work!
if current_page?(posts_path)
  redirect_to posts_path(anchor: "post_#{@post.id}"
else
  redirect_to @post
end
Run Code Online (Sandbox Code Playgroud)

Ahm*_*rif 12

深入Rails重定向机制,:back只是意味着重定向到HTTP_REFERER环境变量中的任何内容(或者如果此变量中没有任何内容则引发错误).所以redirect_to :back在你的控制器之前添加这一行:env["HTTP_REFERER"] += '#some-id',这应该这样做.

  • 回答了我自己的问题:`redirect_to request.referer +'#some-id'` (8认同)

ume*_*ezo 0

我最终使用了 Javascript。

posts_controller.rb

def vote
  @post = Post.find(params[:id])
  #voting logic
  respond_to do |format|
    format.html { redirect_to :back }
    format.js
  end
end
Run Code Online (Sandbox Code Playgroud)

帖子/_post.html.erb

<div class="post_partial" id="post_<%= post.id %>">
  <%= post.content %>
  <div id="vote_button_<%= post.id %>">
    <%= link_to "up", vote_path, method: "post", remote: true %>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

帖子/vote.js.erb

$('#post_<%= @post.id %>').html('<%= j render @post %>');
Run Code Online (Sandbox Code Playgroud)