rails实现删除的属性

时间:2010-11-05 19:41:04

标签: ruby-on-rails scope

我有一个有很多联系人的表单。我希望能够删除联系人而不删除它们,但标记它们已被删除。我在联系人表格中添加了“已删除”属性。

在大多数情况下,我想要一个表单联系人,我只想要那些未删除的联系人:

form.contacts.find_all_by_deleted(false)

这看起来很混乱,所以我在考虑使用named_scope或default_scope,但很多人似乎都说它们是邪恶的。

我还想到只是改变表单上的关系(这是否与默认范围相同?这是邪恶的吗?):

has_many :contacts, :conditions => ["deleted = false"]

在我的管理视图中,我需要能够查看所有联系人。我想我可以从“联系人”端添加表单的ID。

似乎这是一个人们会实施很多东西的东西,必须有一个很好的同意最佳实践。

任何解决方案都必须在Rails 2中运行,而不是Rails 3过时。不喜欢插件或gem。

2 个答案:

答案 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感到不安是有充分理由的,因为有时它会导致意外行为。