Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用表单中提交的变量在数据库中存储计算_Ruby_Forms_Variables_Model - Fatal编程技术网

Ruby 使用表单中提交的变量在数据库中存储计算

Ruby 使用表单中提交的变量在数据库中存储计算,ruby,forms,variables,model,Ruby,Forms,Variables,Model,我正在提交一个简单的表单,其中包含数据库中命名的变量 我正在努力: 将提交的变量存储在数据库中(工作正常) 运行计算,然后将该值存储到数据库中 无论我尝试什么,我都会得到一个错误或'nil'(在@kcmil.inspect上)作为我的@kcmil结果。我假设在我当前的代码中,我没有将变量传递给模型,但即使它在控制器中也不起作用 我在这里不知所措。我在表单存储中提交的变量与预期一样好。我只想能够使用表单中提交的变量(也就是在提交时存储的数据库项),并在保存到数据库之前(或者之后,如果有关系的话?)

我正在提交一个简单的表单,其中包含数据库中命名的变量

我正在努力:

  • 将提交的变量存储在数据库中(工作正常)
  • 运行计算,然后将该值存储到数据库中
  • 无论我尝试什么,我都会得到一个错误或
    'nil'
    (在@kcmil.inspect上)作为我的
    @kcmil
    结果。我假设在我当前的代码中,我没有将变量传递给模型,但即使它在控制器中也不起作用

    我在这里不知所措。我在表单存储中提交的变量与预期一样好。我只想能够使用表单中提交的变量(也就是在提交时存储的数据库项),并在保存到数据库之前(或者之后,如果有关系的话?)运行计算并将结果存储到数据库项中(之前未在表单中调用或从表单中保存)。这有意义吗?非常感谢任何帮助或提示

    以下是我当前的计算器\u控制器创建和编辑操作:

      def create
       @calculator = Calculator.new(calc_params)
       if @calculator.save
          flash[:notice] = "Calculation created successfully."
          redirect_to(:action => 'index')
        else
          render('new')
        end
      end
    
      def update
        @calculator = Calculator.find(params[:id])
        if @calculator.update_attributes(calc_params)
         flash[:notice] = "Calculation updated successfully."
          redirect_to(:action => 'index', :id => @calculator.id)
        else
          render('edit')
        end
      end
    
    private
    
     def calc_params
          params.require(:calculator).permit(:subsection, :amps, :volts, :distance, :vdrop, :phase, :kcmil, :section_id)
     end
    
    这是我的型号

    class Calculator < ActiveRecord::Base
    
    before_create :kcmil_calc
    
    def kcmil_calc
       if @phase == 1
              self.kcmil = ((13 * @distance.to_i * @amps.to_i ) / @vdrop.to_i).round(2)
           else
              self.kcmil = ((12.9 * @distance.to_i  * @amps.to_i ) / @vdrop.to_i).round(2)
          end
      end
    
    end
    
    类计算器
    我拿到了!我知道了

    before_update :defaults
    
    def defaults
        if self.phase == 1
            self.kcmil = ((12.9 * distance * amps) / vdrop).round(2)
        else
            self.kcmil = ((13 * distance * amps) / vdrop).round(2)
        end
    end
    
    解决了!我不得不调用
    self.phase
    而不是
    @phase
    ,并在创建之前将
    更改为更新之前的
    ,以使其正常工作。不需要更改控制器。该死-一个简单的@!我还删除了to_I,因为它不需要,因为我的视图阻止我提交除整数以外的任何内容