如何临时更改列的默认值?

时间:2009-10-17 11:22:04

标签: ruby-on-rails

我有一个包含许多预定义行(> 100)的模型,也可以由用户编辑。 我想区分预定义和用户添加的行。

因为数据库也将由第三方应用程序编辑,所以我希望安全起见并在数据库模式中将predefined的默认值设置为false,因为设置它为true将导致对行的严重限制(即永远不能删除)

另一方面,创建>的安装脚本现在,100个预定义行必须为每一行指定predefined = true,这会使脚本变得混乱。

这并不是那么糟糕,但如果有一种简单的方法可以改变Rails的默认方式,那么它会使我的脚本看起来更友好。

换句话说:我想写这个:

MyModel.create(:data => "value")

但我想要发生的是:

MyModel.create(:data => "value", :predefined = true)

这可能吗?

编辑:这只是一个例子,实际上我需要为预定义列设置不同的列。

1 个答案:

答案 0 :(得分:1)

你可以用两种不同的方式做到:

在您的迁移中:

t.column :boolean :string, :default => true

它直接在数据库中将默认值定义为true。 当您更改它时,您必须创建一个新的迁移。

在你的模特中:

def before_create
    predefined = true if predefined.nil?
end

它将值定义为“true”,除非您已将其定义为其他内容。 您只需在模型中更改该值即可更改该值。