假设我在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
答案 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
但是,如果您要验证是否存在a
,b
和add
,那么您可以使用before_validation
回调来设置{{1}的值}}
查看http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html以查看add
回调的列表和顺序。