如何使用validate_presence_of
更新记录值为空的表中的所有字段而不逐个写入所有字段?
答案 0 :(得分:2)
你的意思是默认值?最简单的方法是在数据库中设置默认值
add_column :posts, :excerpt, :text, :default => "No excerpt available"
validates_presence_of
仅检查是否存在值。
您可以选择设置before_validation
挂钩:
before_validation :set_values
def set_values
attributes.each do |attr|
self.send("#{attr}=".to_sym, 'Default value') if attr.nil?
end
end
答案 1 :(得分:0)
我认为您不能为此目的使用验证。仅当某个对象以某种方式保存或更新到数据库时才会运行验证,因此如果表中已有一堆记录,然后再写入验证,则根本不会影响现有的数据库记录。除非您尝试再次更新它们。
但是,如果要使用一个数据库查询更新一堆记录,可以使用方法调用update_all。它可能看起来像这样:
Record.update_all "value = 'default_value'", "value IS NULL"