我有一个base_price
字段,一个shipping_price
字段和一个total_price
字段。
这是一个简单的base_price
加shipping_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
它没有进行计算并将其保存在数据库中,而且我并没有真正得到错误。
答案 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_i
和before_save :total_price_calculator
private
def total_price_calculator
self.total_price = base_price.to_i + shipping_price.to_i
end
上使用self
,因为它已经具有从表单中提供的值。
或者您可以直接使用如下所示
base_price
希望有所帮助