2012-12-10 58 views
7

我有一个博客应用程序,其帖子可以通过posts控制器中的vote操作接收投票。 因为我允许在投票之后进行投票,所以我在redirect_to :back之后进行投票,如下所示。如何将锚点添加到redirect_to:back

def vote 
    # voting logic goes here 
    redirect_to :back 
end 

这会将我重定向到正确的页面,但我希望重定向到页面内的特定帖子。要做到这一点,我添加了一个识别锚点到我的帖子部分div。

<div id="post_<%= post.id %>"> 
    <%= post.content %> 
</div> 

如何在我的redirect_to :back中参考?我试着下面,这是行不通的。

# this doesn't work! 
redirect_to :back, anchor: "post_#{@post.id}" 

另外,如果我要使用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 

回答

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 

帖子/ _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> 

帖子/ vote.js.erb

$('#post_<%= @post.id %>').html('<%= j render @post %>'); 
1

编辑:好吧,我的坏,感到困惑。你应该看看这个:

What's the right way to define an anchor tag in rails?

EDIT2:

你有问题是要调用控制器内部,而不是一个视图中的辅助工具。

我鼓励你看看到view_context方法

http://jhonynyc.tumblr.com/post/5361328463/use-view-context-inside-rails-3-controller

+0

嗨@Kevin。感谢您的意见。看起来我的第一个选择(使用':back')将不起作用,因为它不会接受锚点。第二个选项(使用if子句)似乎没问题,并且view_context方法起作用。我会怎么说,“如果你在索引页面投了一个帖子”?使用'current_Page?(posts_path)'不起作用,可能是因为它在不同的操作中被调用(即不是索引操作)。我怎么能说,“如果我投票在索引页上的帖子,重定向到索引页上的该帖子,否则重定向到该帖子的显示页面” – umezo

+2

我认为你想要做的不是使用重定向用户,但实际上让用户对帖子投票而不被重定向到任何地方(留在他投票的同一页面上)。 所以我的建议是使用一个简单的ajax链接:它在不改变用户的当前视图的情况下执行给定的方法。 编辑:这里是您需要的代码 '<%= link_to_function“投票”,“$ .ajax({type:'GET',url:'/ your_controller/voteup /'})”%>' –

+0

好点子。这或多或少是我所做的。感谢您的意见。 – umezo

10

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

+0

谢谢@Ahmad。我结束了使用JavaScript来处理这个问题。但是当我需要它时,一定会记住这一点! – umezo

+0

有没有人知道这是如何在Rails 2中完成的。 – olleicua

+7

回答了我自己的问题:'redirect_to request.referer +'#some-id'' – olleicua

相关问题