我有一个包含许多预定义行(> 100)的模型,也可以由用户编辑。 我想区分预定义和用户添加的行。
因为数据库也将由第三方应用程序编辑,所以我希望安全起见并在数据库模式中将predefined
的默认值设置为false
,因为设置它为true将导致对行的严重限制(即永远不能删除)
另一方面,创建>的安装脚本现在,100个预定义行必须为每一行指定predefined = true
,这会使脚本变得混乱。
这并不是那么糟糕,但如果有一种简单的方法可以改变Rails的默认方式,那么它会使我的脚本看起来更友好。
换句话说:我想写这个:
MyModel.create(:data => "value")
但我想要发生的是:
MyModel.create(:data => "value", :predefined = true)
这可能吗?
编辑:这只是一个例子,实际上我需要为预定义列设置不同的列。
答案 0 :(得分:1)
你可以用两种不同的方式做到:
在您的迁移中:
t.column :boolean :string, :default => true
它直接在数据库中将默认值定义为true。 当您更改它时,您必须创建一个新的迁移。
在你的模特中:
def before_create
predefined = true if predefined.nil?
end
它将值定义为“true”,除非您已将其定义为其他内容。 您只需在模型中更改该值即可更改该值。