将respond_to方法放在before_action回调中

时间:2015-08-03 15:14:55

标签: ruby-on-rails ajax model-view-controller callback controller

我想你可以认为这是我之前的question的延续。基本上我正在渲染js.erb部分,这使得ajax功能可以喜欢/不喜欢餐馆菜。我有四个动作可以解决这个问题:

class DishesController < ApplicationController
  def like
    @dish.liked_by current_user

    respond_to do |format|
      format.js { render partial: "dishes/shared/vote.js.erb" }
    end
  end

  def unlike
    @dish.unliked_by current_user

    respond_to do |format|
      format.js { render partial: "dishes/shared/vote.js.erb" }
    end
  end
  ...
end

为了干这个问题,我计划将respond_to方法放在before_action回调中:

class DishesController < ApplicationController
  before_action :render_vote_partial
  ...
  private
    ...
    def render_vote_partial
      respond_to do |format|
        format.js { render partial: "dishes/shared/vote.js.erb" }
      end
    end
end

不幸的是,这根本不会呈现部分。我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果你想干掉respond_to,只需将它贴在一个方法中(就像你已经这样)并在每次动作后调用该方法。

而不是

before_action :render_vote_partial

就这样做:

def like
  # do your work here ...

  render_vote_partial
end

def unlike
  # do your work here ...

  render_vote_partial
end