背景:我正在使用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 只是用来记录投票和刷新页面。
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 调用不会刷新页面。
如果我将 respond_to 调用移出 if 语句并删除 if 语句,那么它就可以正常工作。
有任何想法吗?