【发布时间】:2010-11-05 19:41:04
【问题描述】:
我有一个包含许多联系人的表单。我希望能够删除联系人而不真正删除它们,而是将它们标记为已删除。我在联系人表中添加了一个“已删除”属性。
在大多数情况下,我想要一个表单联系人,我只想要那些未删除的联系人:
form.contacts.find_all_by_deleted(false)
这看起来很乱,所以我在想一个named_scope或一个default_scope,但是很多人似乎说它们是邪恶的。
我还想过只是将表单上的关系更改为(这与默认范围相同吗?它是邪恶的吗?):
has_many :contacts, :conditions => ["deleted = false"]
在我的管理员视图中,我需要能够查看所有联系人。我想我可以从联系人端添加表单的 id 进行查找。
似乎这是人们会大量实施的事情,并且必须有一个公认的最佳实践。
任何解决方案都必须在 Rails 2 中工作,并且不能在 Rails 3 中过时。最好不要使用插件或 gem。
【问题讨论】:
-
为什么不喜欢使用 gem?为什么您宁愿实现自己的代码,这样工作更多、测试更少、功能更少? ruby-toolbox.com/categories/activerecord_soft_delete.html
-
嗨,Ryeguy,如果 gems 能够带来显着的价值,它们是很棒的,但缺点是代码的可维护性。对于 1 个问题的一类,添加一个 gem 对我来说似乎有点过分了。如果我想在我所有的模型上使用它,那可能是值得的。许多 gem 维护不善,从 rails 版本迁移会破坏它们,它们会导致意想不到的后果。我们计划非常广泛地部署这个代码库,因此我们尽可能将依赖关系保持在最低限度。查看下面的 KandadaBoggus 建议,这似乎是 2 行代码与另一个 gem。
标签: ruby-on-rails scope