我有一个有很多联系人的表单。我希望能够删除联系人而不删除它们,但标记它们已被删除。我在联系人表格中添加了“已删除”属性。
在大多数情况下,我想要一个表单联系人,我只想要那些未删除的联系人:
form.contacts.find_all_by_deleted(false)
这看起来很混乱,所以我在考虑使用named_scope或default_scope,但很多人似乎都说它们是邪恶的。
我还想到只是改变表单上的关系(这是否与默认范围相同?这是邪恶的吗?):
has_many :contacts, :conditions => ["deleted = false"]
在我的管理视图中,我需要能够查看所有联系人。我想我可以从“联系人”端添加表单的ID。
似乎这是一个人们会实施很多东西的东西,必须有一个很好的同意最佳实践。
任何解决方案都必须在Rails 2中运行,而不是Rails 3过时。不喜欢插件或gem。
答案 0 :(得分:2)
你表现得像个偏执狂:-) http://ar-paranoid.rubyforge.org/
答案 1 :(得分:1)
方法1:关联:
class User
has_many :active_contacts, :class_name => "Contact",
:conditions => {:deleted => false}
has_many :contacts
end
在您的管理员控制器中使用contacts
关联,其他地方都使用active_contacts
关联。
方法2:default_scope:
class User
has_many :contacts
end
class Contact
default_scope {:conditions => {:deleted => false}}
end
对于普通用户:
u.contacts
对于管理员用户:
User.send(:with_exclusive_scope){u.contacts}
我使用default_scope来排除deleted
条记录。人们对default_scope
感到不安是有充分理由的,因为有时它会导致意外行为。