后台:我使用acts_as_votable gem来记录Resource
模型上的相似内容。我正在分割类似按钮的行为以适应(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]
如果用户未登录,并且他们点击了“赞”按钮,则会存储其原始路径 - >强迫他们登录 - >返回原来的路径(喜欢资源) - >并将它们重定向回资源索引。
如果用户已登录,则ajax仅用于记录投票并刷新页面。
resources_controller.rb中的 like
操作
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语句,那么它的工作正常。
有什么想法吗?
答案 0 :(得分: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