根据其他参数确定参数值的命令序列
Sequence of commands to determine param values based on other params
控制器动作需要根据一些参数计算值,其结果需要在同一个动作中更新
def update
calculate_weight_volume
authorize @itme
@itme.update(itme_params)
方法
def calculate_weight_volume
if !params[:itme][:width].nil? && !params[:itme][:length].nil? && !params[:itme][:height].nil? && !params[:itme][:weight].nil?
@weight_volume = (params[:itme][:width].to_d + 1) * (params[:itme][:length].to_d + 1) * (params[:itme][:height].to_d + 1) / conversion_factor
if @weight_volume > params[:itme][:weight].to_d
params[:itme][:weight_volume] = @weight_volume
else
params[:itme][:weight_volume] = @itme
end
end
end
不是用参数计算的,而是用记录的保存属性计算的。
除了 rails4 使用属性进行计算之外,很明显,在 update_params 开始之前,对方法 calculate_weight_volume
的调用被忽略了。
为什么会这样,如何克服?
一种方法是修改顺序
def update
authorize @itme
@itme.update(itme_params)
calculate_weight_volume
@debit.update_attributes(amount: params[:correction][:newamount])
并将方法更改为根据保存的值进行更新
此外,如果涉及其他模型的更新,这些操作应该在计算之后进行
def calculate_weight_volume
if !@itme.width.nil? && !@itme.length.nil? && !@itme.height.nil? && !@itme.weight.nil?
@weight_volume = (@itme.width.to_d + 1) * (@itme.length.to_d + 1) * (@itme.height.to_d + 1) / conversion_factor
if @weight_volume > @itme.weight.to_d
@itme.update(weight_volume: @weight_volume)
else
@itme.update(weight_volume: @itme.weight)
end
end
end
我期待对数据库进行多次点击,但注意到如果数据未更改,不会执行任何提交。没有我想象的那么低效。但是还是觉得很蠢。
控制器动作需要根据一些参数计算值,其结果需要在同一个动作中更新
def update
calculate_weight_volume
authorize @itme
@itme.update(itme_params)
方法
def calculate_weight_volume
if !params[:itme][:width].nil? && !params[:itme][:length].nil? && !params[:itme][:height].nil? && !params[:itme][:weight].nil?
@weight_volume = (params[:itme][:width].to_d + 1) * (params[:itme][:length].to_d + 1) * (params[:itme][:height].to_d + 1) / conversion_factor
if @weight_volume > params[:itme][:weight].to_d
params[:itme][:weight_volume] = @weight_volume
else
params[:itme][:weight_volume] = @itme
end
end
end
不是用参数计算的,而是用记录的保存属性计算的。
除了 rails4 使用属性进行计算之外,很明显,在 update_params 开始之前,对方法 calculate_weight_volume
的调用被忽略了。
为什么会这样,如何克服?
一种方法是修改顺序
def update
authorize @itme
@itme.update(itme_params)
calculate_weight_volume
@debit.update_attributes(amount: params[:correction][:newamount])
并将方法更改为根据保存的值进行更新
此外,如果涉及其他模型的更新,这些操作应该在计算之后进行
def calculate_weight_volume
if !@itme.width.nil? && !@itme.length.nil? && !@itme.height.nil? && !@itme.weight.nil?
@weight_volume = (@itme.width.to_d + 1) * (@itme.length.to_d + 1) * (@itme.height.to_d + 1) / conversion_factor
if @weight_volume > @itme.weight.to_d
@itme.update(weight_volume: @weight_volume)
else
@itme.update(weight_volume: @itme.weight)
end
end
end
我期待对数据库进行多次点击,但注意到如果数据未更改,不会执行任何提交。没有我想象的那么低效。但是还是觉得很蠢。