我正在从Python后端迁移到Ruby on Rails,而一些遗留的客户端js代码如下所示:
$http.post(url, data, config).
success(function(data, status, headers, config) {
if(data == 0) {
$scope.subscribed = 'true'
} else {
alert("There is an issue with that email address.")
return
}
}).
error(function(data, status, headers, config) {
return
});
我现在有后端做它应该在这里做的事情,但除非我使用闪光灯,否则我不确定如何将成功/失败状态返回给调用函数。我只想返回一个整数值,以便代码可以继续按原样运行。那可能吗?或者我是否需要重写前端以使用闪存哈希?
编辑:对于记录,这就是处理它的后端代码的样子。
路线:
Rails.application.routes.draw do
root to: 'static_pages#index'
resources :subscriptions, only: [:create]
match '/subscribe', to: 'subscriptions#subscribe', via: :post
end
控制器:
class SubscriptionsController < ApplicationController
protect_from_forgery
returnVal = -1
def subscribe
begin
# Do some stuff that could cause an exception>
flash[:success] = "Subscribed successfully"
logger.debug flash[:success]
returnVal = 0
rescue <Some exception>
flash[:error] = "Error"
rescue <Another exception>
flash[:error] = "Error"
end
if (!flash[:error].blank?)
logger.debug flash[:error]
end
render 'static_pages/index'
return returnVal
end
end
除了&#34;返回&#34;所有似乎都工作正常。一部分。
答案 0 :(得分:2)
在Rails控制器中,您不必return
要发送到浏览器的文本。相反,你render
。
例如:
render plain: returnVal
(来自the Rails Guide on layouts and rendering)
此外,您可能不需要Flash哈希。 flash
用于临时存储会话数据并在下一个请求中检索它。由于您只在此处发出一个请求,因此不需要flash
。
或者我是否需要重写前端以使用闪存哈希?
前端无法使用Flash哈希。这只能在服务器上访问。
我不确定如何将成功/失败状态返回给调用函数。
你使用这样的短语让我想知道你是否真的明白这里发生了什么。您无法直接从客户端调用服务器端功能。您所能做的就是发出HTTP请求,就像浏览器访问页面时一样。您的代码只是告诉浏览器下载页面,Rails后端在该页面内呈现响应,就像您可能访问的任何其他网页一样。