我的模型中有一个解析API并返回数据的方法:
def self.get_item_info(date, time, limit)
url = URI.parse("#{end_point_url}/#{date}?mRange=#{time}&limit=#{limit}")
@response = JSON.parse(Net::HTTP.get_response(url).body)
if @response["ERROR"]
flash[:notice] = { :notice => "Sorry, No Data returned. Message: #{@response["ERROR"]["errorMessage"]}" }
else
@data = []
@items = @response["v1"]["items"]
@items.each do |item|
add_data(item["itemNbr"])
@data << [@fam_id = item["FamId"],
@item_nbr = item["itemNbr"],
@item_desc = item["itemDesc"]]
end
return @data
end
end
我的控制器:
def index
if
date = params[:date]
time = params[:time]
limit = params[:limit].to_i
Product.get_item_info(date, time, limit)
if @message
redirect_to "/view_api", :flash => { :notice => "Sorry, No Data returned. Message: #{@message}" }
else
@data
end
end
end
如果API返回错误,我该如何重定向:返回我的控制器并刷新API返回的错误消息。我最初在我的控制器中有这个逻辑,但是为了测试目的将它移到我的模型中。
答案 0 :(得分:3)
你的模型方法应该是:
def self.get_item_info(date, time, limit)
url = URI.parse("#{end_point_url}/#{date}?mRange=#{time}&limit=#{limit}")
response = JSON.parse(Net::HTTP.get_response(url).body)
if response["ERROR"]
return [nil, { :error => "Sorry, No Data returned. Message: #{response["ERROR"]["errorMessage"]}" }]
else
data = []
items = response["v1"]["items"]
items.each do |item|
add_data(item["itemNbr"])
data << [fam_id = item["FamId"],
item_nbr = item["itemNbr"],
item_desc = item["itemDesc"]]
end
return [data,{ :success => "true" }]
end
end
然后在你的控制器中:
def index
date = params[:date]
time = params[:time]
limit = params[:limit].to_i
@data, @message = Product.get_item_info(date, time, limit)
if @message[:error].present?
redirect_to "/view_api", :flash => { :notice => @message[:error] }
else
@data
end
end
end
请检查是否存在语法或逻辑错误。我只是表明了方式。
您不应该没有任何理由使用任何实例变量。特别是模特。 如果您不关心特定的错误消息,那么您可以在模型中引发异常并在控制器中使用begin .. rescue块来处理异常