检查陈述

时间:2012-03-02 17:19:11

标签: ruby-on-rails-3

您好我有以下代码:

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 个答案:

答案 0 :(得分: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