2014-02-13 49 views
0

我正在努力寻找能够帮助您的专家。我正在编写一个Ruby 2.0.0p247(Rails 3.2.13)的API与一组控制器,可以调用一个名为send_response,它采用状态和可选参数,并格式化为一个适当的HTTP响应然后通过JSON将其返回给最终用户,然后停止所有执行。 API调用受数据库支持的令牌的保护。Ruby在函数中使用'return false'时不会停止执行

我正在使用render json: response, :status => response['status'] and return false'但执行似乎继续,无论如何。例如:API调用添加一个日志条目,我使用了一个错误的参数让我得到一个JSON响应,说明错误的参数,但日志条目仍然被添加。

的来源“send_response()调用:

# Make sure the user is using the correct parameters, otherwise kick 'em out 
params.each do |key,value| 
    if params_list.include?(key) == false 
    send_response 500, data: 'Invalid parameters used!' 
    end 
end 

我完全茫然,为什么执行:

def send_response(status, options = {}) 
    source = options[:source] || nil 
    count = options[:count] || -1 
    data = options[:data] || nil 
    id = options[:id] || -1 
    trigger_id = options[:trigger_id] || -1 

    response = {} 

    case status 
    when 'ok', 200 
     response['status'] = 200 
     response['message'] = 'success' 
     response['count'] = count unless count == -1 
     response['data'] = data unless data == nil 
     response['id'] = id unless id == -1 
     response['trigger_id'] = trigger_id unless trigger_id == -1 
    when 'bad_request', 400 
     response['status'] = 400 
     response['message'] = 'error' 
     response['data'] = data unless data == nil 
    when 'unauthorized', 401 
     response['status'] = 401 
     response['message'] = 'unauthorized' 
     response['data'] = data unless data == nil 
    when 'internal_error', 500 
     response['status'] = 500 
     response['message'] = 'error' 
     response['data'] = data unless data == nil 
    else 
    response['status'] = 500 
     response['message'] = 'error' 
     response['data'] = 'Invalid send_response() sent.' 
    end 

    response['source'] = caller[0][/`.*'/][1..-2] if Rails.env.development? 

    render json: response, :status => response['status'] and return false 
end 

这个功能的一个例子我的控制器被称为没有结束,任何帮助将不胜感激指向正确的方向。

在此先感谢!当前方法的

--Jayson

回答

0

return完成执行 - 在你的情况下,如果终止send_response方法,并使其返回false。你想要返回“父母”的方法,而不是:

params.each do |key,value| 
    if params_list.include?(key) == false 
    send_response 500, data: 'Invalid parameters used!' and return false 
    end 
end 
+0

非常感谢你 - 它完美的作品! –