我刚刚在我的数据库中的现有表中添加了一个新列:
class AddMoveableDateToDocument < ActiveRecord::Migration
def change
add_column :documents, :moveable_date, :datetime
end
end
在我的Rails模型中,我希望在创建时将moveable_date
属性设置为默认值,应用程序将能够稍后更改此日期。所以,像:
class Document < ActiveRecord::Base
before_create :set_moveable_date
def set_moveable_date
self.moveable_date ||= self.created_at
end
end
现在,已保存到数据库中的现有模型尚未设置此moveable_date
(值为nil
)。如何运行所有现有模型并使用其默认值填充moveable_date
属性?什么是最简单/最佳实践方式?可以在应用程序代码本身,控制台,终端或其他方面。谢谢!
答案 0 :(得分:1)
你会在这个问题上获得很多自以为是的答案。有些人会建议控制台,有些人会建议一次性佣金。
我建议将其作为添加列的迁移的一部分。添加列后,您可以运行Document.reset_column_information
以便Rails应用程序选择新列,然后迭代现有文档记录并根据需要设置可移动日期。
或者,如果将可移动日期设置为created_at日期这么简单,您可以使用Document.update_all("moveable_date = created_at")
之类的内容,而不是迭代它们。
答案 1 :(得分:0)
这是一个很好的建议!
另一种方法是将线before_save :set_moveable_date
添加到模型中。它不会立即完成转换,但如果您的数据定期更新,它就会起作用。