gpt4 book ai didi

ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0

转载 作者:数据小太阳 更新时间:2023-10-29 07:13:50 24 4
gpt4 key购买 nike

我希望我的 UserPrice 模型的属性在它们为空或不验证数值时默认为 0。这些属性是 tax_rate、shipping_cost 和 price。

class CreateUserPrices < ActiveRecord::Migration
def self.up
create_table :user_prices do |t|
t.decimal :price, :precision => 8, :scale => 2
t.decimal :tax_rate, :precision => 8, :scale => 2
t.decimal :shipping_cost, :precision => 8, :scale => 2
end
end
end

起初,我将所有 3 列的 :default => 0 放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的 UserPrice 模型:

class UserPrice < ActiveRecord::Base
attr_accessible :price, :tax_rate, :shipping_cost
validates_numericality_of :price, :tax_rate, :shipping_cost
validates_presence_of :price
end

回答

before_validation :default_to_zero_if_necessary, :on => :create

private

def default_to_zero_if_necessary
self.price = 0 if self.price.blank?
self.tax_rate = 0 if self.tax_rate.blank?
self.shipping_cost = 0 if self.shipping_cost.blank?
end

最佳答案

您可以将它放在 before_validation 生命周期操作中:

before_validation :default_to_zero_if_necessary

private
def default_to_zero_if_necessary
price = 0 if price.blank?
tax_rate = 0 if tax_rate.blank?
shipping_cost = 0 if shipping_cost.blank?
end

您不需要检查输入是否为字符串,因为无论如何在这种情况下 Rails 都会将其默认为 0。如果您只在 create 操作期间需要此验证,则可以将其更改为:

before_validation :default_to_zero_if_necessary, :on => :create

关于ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8895586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com