2012-12-10 9 views
7

私は、ポストコントローラで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}" 

また、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 

答えて

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

EDIT:ok my bad、got confused。あなたは持っている問題は、ビュー内のコントローラではなく内部のヘルパーを呼び出しているということである

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

EDIT2:あなたは、このになっているはずです。

私は:backは、単に何でもHTTP_REFERERで環境変数にリダイレクトする(または、この変数に何もない場合はエラーを発生させる)を意味し、view_context方法メカニズムをリダイレクトRailsの中にディープ

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

+0

こんにちは@Kevin。入力いただきありがとうございます。私の最初の選択肢( ':back'を使う)は動作しません。なぜなら、アンカーを受け入れないからです。 2番目のオプション(if節を使用)は、okと思われ、view_contextメソッドが機能します。 「インデックスページの投稿に投票した場合はどうすればいいですか? 'current_Page?(posts_path) 'を使うと、おそらく別のアクション(つまり、インデックスアクションではない)内で呼び出されているため、動作しません。 「インデックスページの投稿に投票し、インデックスページのその投稿にリダイレクトし、そうでなければ、その投稿の表示ページにリダイレクトする」と言うことができます。 – umezo

+2

あなたがしたいことは、リダイレクトするアクションを使用しないことです実際にユーザーはどこにでもリダイレクトされることなく(投票された同じページにとどまることなく)投票に投票します。 私は、単純なajaxリンクを使用することを勧めます。つまり、ユーザーの現在のビューを変更せずに所定のメソッドを実行します。 編集:ここにコードがあります '%% link_to_function" $ {JAX({タイプ: 'GET'、url: '/ your_controller/voteup /'}) "%>' –

+0

いい視点ね。それは多かれ少なかれ私がやったことです。入力いただきありがとうございます。 – umezo

10

を検討することをお勧めします。コントローラのredirect_to :backがこの行を追加する前に:env["HTTP_REFERER"] += '#some-id'、これはそれを行う必要があります。

+0

ありがとう@Ahmad。私はこれを処理するためにjavascriptを使用して終了しました。しかし、私はそれが必要な時にこれを念頭に置いています! – umezo

+0

誰もが、これはRailsの2 – olleicua

+7

で行うことができる方法を知っていますが、自分の質問回答: 'redirect_to request.referer +「#いくつかの-id'' – olleicua

関連する問題