我在表上有一列,在创建新记录时可能会填充或不填充。我们称之为free_shipping_amount
及其类型integer
,它位于shipping_methods
表中。
我还有一个由此ShippingMethods
模型支持的表单。因此,我不希望此字段显示为0
,因为它不是零,只是没有。
如何将此列设置为可选,或不需要或非零或空字符串,因为它是一个整数。看似nil
和null
无法正常工作。
我已尝试过以下迁移,但他们都没有工作:
change_column :shipping_methods, :free_shipping_amount, :integer,
default: ""
change_column_null :shipping_methods, :free_shipping_amount, true
change_column :shipping_methods, :free_shipping_amount, :integer,
:default => nil
change_column_default(:shipping_methods, :free_shipping_amount, nil)
change_column :shipping_methods, :free_shipping_amount, :integer, null: true
然后我尝试了这个,但是我的模型支持表单显示0
这不是我想要的东西..
change_column_default(:shipping_methods, :free_shipping_amount, 0)
此表格中的字段如下所示:
t.integer "free_shipping_amount"
问题是我无法将记录保存到此表而不会将某些内容传递给此字段。
我使用如下所示的强参数:
def shipping_method_params
params.require(:shipping_method).permit(:free_shipping_amount)
#other values removed for brevity
end
当我这样创作时:
@shipping_shop = ShippingMethod.create(shipping_method_params)
未创建记录,并且回滚事务。
哦,天啊..我在模特中有这个。
validates :free_shipping_amount, numericality: true
那么如何在不传递此字段值的情况下保存此模型?或者我仍然可以验证数值?
答案 0 :(得分:1)
@ToddT我做了这次迁移
class AddFieldToShippingMethods < ActiveRecord::Migration
def change
add_column :shipping_methods, :free_shippping_amount2, :integer
end
end
和demo
您的迁移不是强制设置默认值
[]&#39; S
答案 1 :(得分:0)
Arghhhhhhh ..我刚发现它here这是我的模型被顶起..我必须将此添加到验证中才能接受空白值。
validates :free_shipping_amount, numericality: {allow_blank: true}
感谢大家的时间,并指出我正确的方向!