使db列可选或不需要,以便我可以创建记录

时间:2016-04-06 18:35:47

标签: ruby-on-rails ruby activerecord

我在表上有一列,在创建新记录时可能会填充或不填充。我们称之为free_shipping_amount及其类型integer,它位于shipping_methods表中。

我还有一个由此ShippingMethods模型支持的表单。因此,我不希望此字段显示为0,因为它不是零,只是没有。

如何将此列设置为可选,或不需要或非零或空字符串,因为它是一个整数。看似nilnull无法正常工作。

我已尝试过以下迁移,但他们都没有工作:

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

那么如何在不传递此字段值的情况下保存此模型?或者我仍然可以验证数值?

2 个答案:

答案 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}

感谢大家的时间,并指出我正确的方向!