【发布时间】:2013-11-30 09:08:12
【问题描述】:
在我的应用程序中,我在创建主题记录时创建了一个目录。这是存储与主题相关的文件资产。我一直在努力使目录的存在与记录的生命周期保持同步。这是我目前的看法:
after_create :create_theme_directory
after_rollback :destroy_theme_directory, :on => :create, :if => :id
def directory
Rails.configuration.uploads_root.join('themes', id.to_s)
end
private
def create_theme_directory
FileUtils.mkdir_p directory
end
def destroy_theme_directory
FileUtils.remove_dir directory, :force => true
end
它运行良好,只是 Rspec 在测试后回滚主题记录时似乎不会触发删除目录。
这种事情有最佳实践吗?这个想法是永远不应该留下一个没有相关记录的杂散目录。
【问题讨论】:
-
可能有更好的方法,但您可以使用 after(:all) 为创建的对象显式调用销毁主题目录。
-
确实如此。问题是我的初始数据库种子包含一个主题,所以我必须有选择地删除其余的。我想只要我能预测到那个特定初始主题的 ID(可能是 1!)就可以了。
-
您使用的是
before(:all)吗? relishapp.com/rspec/rspec-rails/docs/transactions -
我不太确定我会用它做什么。你在想什么? :)
-
哦,我明白了,我正在使用 factory_girl 创建主题,以便它们在回滚的事务中。我认为只是回滚不是通过rails调用的,所以rails不知道触发回调。
标签: ruby-on-rails activerecord rspec ruby-on-rails-3.2 filesystems