0

我的模型中有一个解析 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 返回错误,如何在我的控制器中重定向 :back 并闪烁 API 返回的错误消息。我最初在我的控制器中有这个逻辑,但为了测试目的将它移到我的模型中。

4

1 回答 1

5

你的模型方法应该是这样的:

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 块来处理异常

于 2013-08-06T04:13:28.337 回答