Rails中的AJAX GET请求,而不呈现视图/json

AJAX GET request in Rails without rendering views/json

本文关键字:视图 json AJAX 中的 GET 请求 Rails      更新时间:2023-09-26

发出GET请求以检查是否发送后续POST请求,并且不需要在第一个请求之后呈现任何内容。我在控制器操作的基础上使用render nothing: true,所以当我通过浏览器控制台发送请求时,我不确定是什么导致了ActionView::MissingTemplate at /able_to_claim错误:

 def able_to_claim
    role, user_id = params[:role], params[:user_id]
    if role == "Senior Editor" or role == "Admin"
      return true 
    else
      active_essays = 0
      Claim.where(:user_id => user_id).each {|claim| active_essays += 1 if Essay.find(claim.essay_id).status != "Complete"}
        if role == "Editor" and active_essays < 5
          return true
        elsif role == "Managing Editor" and active_essays < 15  
          return true
        else 
          return false 
        end 
    end
    render nothing: true
  end 

路线:get '/able_to_claim' => 'users#able_to_claim'

js文件:

response = $.ajax({
          type: 'GET',
          url : '/able_to_claim/?role=' + userRole + '&user_id=' + userId,
          crossDomain: true,
          contentType:'application/json; charset=utf-8',
          dataType: 'json'
        });

application.html.erb:中定义的userRole和userId

<%= javascript_tag "var userId = #{current_user.id};" if current_user %>
  <%= javascript_tag "var userRole = '#{current_user.role}';" if current_user %>

哇,感觉真傻。我完全不知道return会脱离函数的其余部分。通过一些重构:

def able_to_claim
    role, user_id = params[:role], params[:user_id]
    if role == "Senior Editor" or role == "Admin"
      can_claim = true
    else
      active_essays = User.find(user_id).essays.where.not(status: 'Complete').count
        if role == "Editor" and active_essays < 5
          can_claim = true
        elsif role == "Managing Editor" and active_essays < 15  
          can_claim = true
        else 
          can_claim = false
        end 
    end
      render json: {can_claim: can_claim}
  end