0
我在下列情况下,考虑在现有的网站上创建,我有其中有许多设备,如这种模式用户:Ruby on Rails的,通过控制
has_many :devices, :through => :credits
当我创建一个设备它创建一个信用,但是信用的一些属性是空的。我想知道是否有办法控制此信贷的创建,并确保为数据库创建的信贷中没有空值。
在此先感谢
我在下列情况下,考虑在现有的网站上创建,我有其中有许多设备,如这种模式用户:Ruby on Rails的,通过控制
has_many :devices, :through => :credits
当我创建一个设备它创建一个信用,但是信用的一些属性是空的。我想知道是否有办法控制此信贷的创建,并确保为数据库创建的信贷中没有空值。
在此先感谢
推荐:在您的信用数据库表 使用默认值。您可以使用数据库迁移来执行此操作。
class AddDefaultValuesToCredits < ActiveRecord::Migration
def change
change_column :credits, :value1, :boolean, default: false
change_column :credits, :value2, :string, default: 'words'
# change other columns
end
end
如果value1
或value2
没有指定明确的价值,他们将分别默认为false
和'words'
。
备选:您也可以在您的信用模式中设置默认值。
class Credit < ActiveRecord::Base
after_initialize :set_values, unless: persisted?
# other model code
def set_values
if self.new_record?
self.value1 = false if self.value.nil? # initial boolean value
self.value2 ||= 'words' # initial string value
# other values
end
end
'after_initialize'被认为是hacky,因为该代码将在每个单独的'Credit'对象初始化时“运行”。我建议只进行数据库迁移。 –
有用的信息瑞安。我想我会给出几个选项。我会更新我的答案以反映使用迁移的建议。 –
@RyanBigg你是什么意思的“神奇”?我见过人们推荐after_initialize来设置默认值,因为即使你只是调用'Class.new',而不像数据库默认值 –