2012-03-02 2 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이 같은 창고가 다른 사람 ingress(egress)transport 문서에없는 경우에만 @itd(@etd).warehouses에 추가 할 수 싶어.

문제점이 코드를 사용하면 어떤 운송 창고도 itd/etd에 연결되지 않은 새로운 운송 서류가 아닌 다른 운송 서류에있는 경우 @itd(@etd).warehouses에 추가 할 수 있습니다.

어디서 실수입니까?

답변

1

코드에서 버그를 찾는 것이 정말 어렵습니다.

내가 대신 내가 당신에게 몇 가지 힌트를 줄 것이다, 오류를 만드는 하나의 어떤 라인 추측하려고하지 않습니다

레일 환경 fat models - skinny controllers의 일반적인 규칙이 있습니다. 코드의 의미는 다음과 같습니다. 스캐 폴딩으로 생성 된 코드를 최소로 남겨 둡니다. 모든 비즈니스 로직이 모델로 이동합니다. 이유를 물을 수 있습니다 : 몇 가지 이유가 있습니다 : 코드를 재사용 할 수 있습니다. 컨트롤러보다 모델에 대한 단위 테스트를 만드는 것이 훨씬 쉽습니다.

나는 당신이 당신의 모델에서 로직에 대한 단위 테스트를 시도하는 것이 좋습니다. 그것은 디버깅보다 훨씬 효율적입니다. 그러나 디버거는 여전히 강력한 도구입니다, 나는 Rubymine에서 디버거를 사용합니다. 디버거를 사용하면 한 줄씩 실행되는 모든 변수 상태를 검사 할 수 있습니다. 코드에서

한 가지 :

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 
: ? 사업자의 남용은

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]) 

는보다 적은 읽을인가