2012-12-10 77 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

相關問題