2016-09-07 30 views
0

背景:Resourceモデルでacts_as_votable gemを使用してログを記録しています。私はサインインしている(a)のユーザを収容するようなボタンの動作を分割するに取り組んでいますと、(b)に署名していないユーザー。Rails - 応答文がif文でラップされたときに応答しない

前/リソースコントローラのアクション後の

before_action :set_resource, only: [:show, :edit, :update, :destroy] 
before_action :save_original_path, only: [:like] 
before_action :require_signin!, only: [:like] 
after_action :clear_original_path, only: [:like] 

ユーザーがサインインしていない場合、同じボタンをクリックすると、元のパスが保存されます - サインインするよう強制されます - 元のパス(リソースが好きです)に戻ります - >リダイレクトされますリソースインデックスに戻る。

ユーザーがサインインしている場合、投票を記録してページを更新するためにajaxが使用されます。

like resources_controller.rbでアクション

def like 
    @resource = Resource.find(params[:id]) 
    @resource.liked_by current_user 
    if session[:return_to] != nil 
    redirect_to resources_path 
    else 
    respond_to do |format| 
     format.html 
     format.js 
    end 
    end 
end 

ファンキーな何かが上記のようなアクションでif文で起こっています。 redirect_to resources_pathフローはサインインしていないユーザーに対しては完全に機能していますが、respond_to ajaxコールはページを更新していません。

if文からrespond_to呼び出しを移動してif文を削除すると、正常に動作します。

アイデア?

答えて

0

これは機能しています。意外なことに、私はそれをあまりにも複雑にしていました。これは動作します:

def like 
    @resource = Resource.find(params[:id]) 
    @resource.liked_by current_user 
    respond_to do |format| 
    if session[:return_to] != nil 
     format.html { redirect_to(resources_path) } 
    end 
    format.html 
    format.js 
    end 
end 
関連する問題