Ruby on rails 创建Rails模型';必要时,他会照顾孩子

Ruby on rails 创建Rails模型';必要时,他会照顾孩子,ruby-on-rails,Ruby On Rails,我有一个有很多图书模型的现场网站。我最近添加了一个属于每本书的设置模型 现在,当我编写使用book.settings方法的代码时,如何避免在每次调用中选中“book.settings.nil”或执行“book.settings | | book.create_settings”?设置模型有一些我可以使用的默认设置。更新:前面的回答建议使用after-commit钩子将默认设置添加到书籍中。根据评论,这不是问题所在。为了避免读者混淆,我删除了前面的答案 您可以使用将在生产服务器上运行一次的rake

我有一个有很多图书模型的现场网站。我最近添加了一个属于每本书的设置模型


现在,当我编写使用book.settings方法的代码时,如何避免在每次调用中选中“book.settings.nil”或执行“book.settings | | book.create_settings”?设置模型有一些我可以使用的默认设置。

更新:前面的回答建议使用after-commit钩子将默认设置添加到书籍中。根据评论,这不是问题所在。为了避免读者混淆,我删除了前面的答案


您可以使用将在生产服务器上运行一次的rake任务来修复书籍,而不使用默认设置。

为什么不将这些条件放在自定义方法上,并调用它而不是调用
设置,如下所示:

def default_settings
  self.settings || self.create_settings
end
@book.default_settings
然后你这样称呼它:

def default_settings
  self.settings || self.create_settings
end
@book.default_settings

您也可以在
default\u设置中检查
nil?

这不是问题,因为我已经有了一个创建设置对象的after create钩子。此问题适用于已存在但尚未为其创建设置对象的书籍。添加一个rake任务,该任务将更新所有未设置的书籍,并在下次将代码推送到生产服务器时运行该任务。谢谢,我最终使用种子文件来完成此操作。如果你想把它作为一个答案,我可以接受。很高兴知道你能让它工作。我仍然建议使用rake任务来修复这些问题,因为您可以将其记录为一次性修复。当您希望系统从一些信息开始时,种子数据会更好。我会更新答案。