Rails之前的简单计算无法正常工作,

时间:2018-02-02 20:06:52

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-5

我有一个base_price字段,一个shipping_price字段和一个total_price字段。

这是一个简单的base_priceshipping_price等于total_price。出于某种原因,我无法在保存模型时使用这个简单的计算。

这是我的代码:

item.rb的

before_save :total_price_calculator

private

  def total_price_calculator
    self.total_price.to_i = self.base_price.to_i + self.shipping_price.to_i
  end

它没有进行计算并将其保存在数据库中,而且我并没有真正得到错误。

4 个答案:

答案 0 :(得分:0)

您在此处对作业应用了一种方法,我怀疑此可能是问题,请尝试这样:

Get
无论如何,

undefined将成为def total_price_calculator self.total_price = self.base_price + self.shipping_price end

答案 1 :(得分:0)

尝试使用其他方法,如before_update / create / validate,插入断点也看看会发生什么,返回false以取消所有后续回调。

也许这是相关的: Rails: How to use before_save to change a field value based on another field?

答案 2 :(得分:0)

def total_price_calculator
  self.total_price.to_i = self.base_price.to_i + self.shipping_price.to_i
  true
end

有时如果它以nil形式出现,那么对于验证将返回false,这将回滚记录而不是保存。

或者进一步调试试试......

def total_price_calculator
  puts self.base_price.to_i
  puts self.shipping_price.to_i
  puts self.base_price.to_i + self.shipping_price.to_i
  puts self.total_price.to_i = self.base_price.to_i + self.shipping_price.to_i
  self.total_price.to_i = self.base_price.to_i + self.shipping_price.to_i
  true
end

如果最后一次put返回false或nil,则保存将无法通过验证而不能保存。

答案 3 :(得分:0)

尝试以下

<!-- language: lang-html --> <button id="arial"> <span>arial</span> </button> <button id="tahoma"> <span>helvetica</span> </button> <!-- language: lang-css --> #arial { font-family : airal; font-size : 1em; } #tahoma { font-family : Tahoma; font-size : 1em; } button { position : relative; width : 100px; height : 40px; } button span { position : absolute; width : 100%; left : 0; top : 50%; transform : translateY(-50%); } 它会在分配给任何值整数时自动保存整数,这就是你不需要调用$dir = "this/is/a/files/location"; $popped = explode('/',$dir); array_pop($popped); $dir = implode('/',$popped);

的原因

修改后

self.total_price

您不需要在to_ibefore_save :total_price_calculator private def total_price_calculator self.total_price = base_price.to_i + shipping_price.to_i end 上使用self,因为它已经具有从表单中提供的值。

或者您可以直接使用如下所示

base_price

希望有所帮助