9

vote投稿コントローラーのアクションを介して投票を受け取ることができる投稿を持つブログ アプリケーションがあります。index ビューと show ビューの両方で投票できるため、次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
4

4 に答える 4

12

Deep in Railsリダイレクトメカニズムは、:back単にHTTP_REFERER環境変数内のすべてにリダイレクトすることを意味します(または、この変数に何もない場合はエラーを発生させます)。したがってredirect_to :back、コントローラに次の行を追加する前に:env["HTTP_REFERER"] += '#some-id'、これで実行できます。

于 2012-12-10T08:33:32.227 に答える
1

編集:わかりました、悪いです、混乱しました。これを調べる必要があります:

レールでアンカータグを定義する正しい方法は何ですか?

EDIT2:

あなたが抱えている問題は、ビュー内ではなくコントローラー内でヘルパーを呼び出していることです。

view_context方法を検討することをお勧めします

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

于 2012-12-10T02:59:43.800 に答える
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

posts / _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 %>');
于 2012-12-10T19:57:00.593 に答える