0

背景:我正在使用acts_as_votable gem 在Resource模型上记录喜欢。我正在努力拆分like按钮的行为,以适应(a)已登录的用户和(b)未登录的用户。

资源控制器中的之前/之后操作

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]

如果用户没有登录,并且他们点击了like按钮,我存储他们的原始路径-->强制他们登录-->返回到他们的原始路径(喜欢资源)-->并将他们重定向回资源指数。

如果用户登录,ajax 只是用来记录投票和刷新页面。

likeresources_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 调用不会刷新页面。

如果我将 respond_to 调用移出 if 语句并删除 if 语句,那么它就可以正常工作。

有任何想法吗?

4

1 回答 1

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
于 2016-09-07T02:44:12.300 回答