2012-03-02 23 views
1

您好我已經下面的代碼:檢查報表

def update_for_transport_document 
    # => DESCRIPTION: 
    # => Utilizzata nelle form di associazione di un warehouse ad una bolla 
    @wh_errors = Hash.new 

    if request.path.include? "ingress_transport_document" 
     session[:user_role] != "administrator" ? 
      @itd = IngressTransportDocument.filtered_by_registry(session[:registry_id]).find(params[:warehouse][:ingress_transport_document_id]) : 
      @itd = IngressTransportDocument.find(params[:warehouse][:ingress_transport_document_id]) 
      @all_itd = IngressTransportDocument.all 
      logger.debug { "INGRESS_TRANSPORT_DOCUMENT_ID: #{@itd.id} " } 
      @warehouse = Warehouse.find(params[:warehouse][:id]) 

      #check_warehouse_in_td(@all_itd,@warehouse) 
      @all_itd.each do |td| 
      td.warehouses.each do |whs| 
       logger.debug {"TD WAREHOUSES:#{whs.id} && #{@warehouse.id}"} 
        if whs.id == @warehouse.id 
        @ok = 'ciccia' 
        break 
        break 
       end    
     end 
     end 
     logger.debug {"OK:#{@ok} "} 
     if @ok != 'ciccia' 
    @itd.warehouses << @warehouse 

      else 
      logger.debug{"NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"} 
      end 
       respond_to do |format| 
     format.html { redirect_to(@itd) } 
      format.xml { head :ok } 
      end 



    else 

     session[:user_role] != "administrator" ? 
      @etd = EgressTransportDocument.filtered_by_registry(session[:registry_id]).find(params[:warehouse][:ingress_transport_document_id]) : 
      @etd = EgressTransportDocument.find(params[:warehouse][:ingress_transport_document_id]) 
      logger.debug { "TEST" } 
      logger.debug { "EGRESS_TRANSPORT_DOCUMENT_ID: #{@etd.id}" } 
       @warehouse = Warehouse.find(params[:warehouse][:id]) 
      logger.debug { "WAREHOUSE_ID: #{@warehouse.id}" } 
    @etd.warehouses << @warehouse 
      respond_to do |format| 
       format.html { redirect_to(@etd) } 
       format.xml { head :ok } 
      end 
     end 

和我想的是@warehouse可以追加到@itd(@etd).warehouses只有在同一倉庫中不存在其他ingress(egress)transport文件。

我的問題是,如果倉庫存在於另一個運輸單據中,那麼任何倉庫都可以附加到@itd(@etd).warehouses,如果它不是與任何itd/etd相關聯的新倉單。

哪裏出錯?

回答

1

在代碼中很難找到錯誤。

我不會試圖去猜測哪些單行使得錯誤,而不是我給你一些提示:

有一個在Rails環境fat models - skinny controllers一般規則。對於您的代碼,它意味着:只留下由腳手架生成的最小代碼。所有的商業邏輯都轉變爲模型。你可能會問爲什麼:有幾個原因:你可以重用你的代碼,對模型進行單元測試要比控制器容易得多。

我真的會鼓勵你嘗試在模型中爲邏輯建立單元測試。它比調試更有效。不過調試器仍然是強大的工具,我使用了來自Rubymine的調試器。調試器使您可以檢查逐行應用程序執行中的所有變量狀態。

一件事在你的代碼:?運營商的過度使用

session[:user_role] != "administrator" ? 
     @itd = IngressTransportDocument.filtered_by_registry(session[:registry_id]).find(params[:warehouse][:ingress_transport_document_id]) : 
     @itd = IngressTransportDocument.find(params[:warehouse][:ingress_transport_document_id]) 

少可讀比:

if session[:user_role] != "administrator" then 
    @itd = IngressTransportDocument.filtered_by_registry(session[:registry_id]).find(params[:warehouse][:ingress_transport_document_id]) 
else 
    @itd = IngressTransportDocument.find(params[:warehouse][:ingress_transport_document_id]) 
end if