Rails - 当response_to包含在if语句中时,ajax没有响应

时间:2016-09-07 01:55:47

标签: ruby-on-rails ruby ajax acts-as-votable

后台:我使用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语句,那么它的工作正常。

有什么想法吗?

1 个答案:

答案 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