Rails 5 - 根据另外两个变量

时间:2016-08-30 00:58:00

标签: ruby-on-rails ruby

假设我在Rails 5中有一个带有3个变量的计算模型:

a - float
b - float
add - float

创建对象时,计算视图中只有两个变量(a& b)。

我想从控制器调用addition(a, b)函数,该函数在将对象保存到数据库之前计算“add”变量。

如何在calculations_controller.rb中使用此函数(或类似函数)来计算并将结果存储在数据库中?每当对象更新时,也应该调用它。

当前的想法:应该在控制器的create和update函数中调用该函数。或者可能使用before_save回调。然而,我对如何将函数的结果分配给控制器中的@calculation对象参数感到有点难过。

class Calculation < ApplicationRecord
    def addition(a, b)
        return a + b
    end
end

示例控制器:

class CalculationsController < ApplicationController
    def create
        # calculate and assign to :add variable here?
        @calculation = Calculation.new(calculation_params)

    respond_to do |format|
      if @calculation.save
        ... redirect_to ...
      else
        ... render :new ...
      end
    end
  end

1 个答案:

答案 0 :(得分:0)

所以在你的控制器里,你可能有类似的东西

# params => { a: 1.0, b: 2.0 }

@calculation = Calculation.new(params)
if @calculation.save
  redirect_to @calculation
else
  render :new
end

所以在你的模型中,

class Calculation < ApplicationRecord
  before_save :addition

  private

  def addition
    add = a + b
  end
end

但是,如果您要验证是否存在abadd,那么您可以使用before_validation回调来设置{{1}的值}}

查看http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html以查看add回调的列表和顺序。