ユーザーログインにDevisewithRailsを使用しています。それはすべてうまく機能しますが、特定のリダイレクトを機能させることができません。
私はレールに慣れていないので、私が物事をしている方法は正しくないかもしれません。
基本的に、例を挙げれば、ユーザーが投稿を高く評価できるようにしています。ただし、そのためにはサインインする必要があります。コントローラーに「like」というアクションを作成しましたが、コントローラーにはデバイスフィルターがあります
before_filter :authenticate_user!, :except => [:index, :show]
入力すると、サインインページが表示されます。ユーザーがサインインしたら、「like」アクションが呼び出されて気に入った投稿にリダイレクトしたいと思います。
私のコントローラーは次のようになります
def like
@post = Post.find(params[:id])
@like = Like.new;
@like.user_id = current_user.id;
@like.post_id = params[:id];
respond_to do |format|
if @like.save
format.html { redirect_to @post, notice: 'You have like this post' }
format.json { head :no_content }
else
format.html { redirect_to @post, notice: 'Sorry you like was not saved }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
当然、after_sign_in_path_forを使用してパスをハードコーディングすることはできません
def after_sign_in_path_for(resource)
#path to somewhere
end
しかし、私はセッション変数を使用でき、おそらく上記のコードでそれを呼び出すことができることを読みました。Railsのどの部分にセッション変数を書き込むことができますか?コントローラーアクションでは遅すぎるため(デバイスが同様のアクションにヒットする前に引き継ぐため)、ビューで設定する方法がわかりません。
また、私のリンクは次のようになります
<%= link_to "Like", {:controller => :posts, :action => :like, :id => @post.id}, {:method => :post } %> |
PS新しい「投稿」の作成を使用する場合のリダイレクトは正常に機能します。つまり、ユーザーはサインインして新しい投稿ビューにリダイレクトされます。
ヘルプとヒントをいただければ幸いです。
ありがとう