рельсы, реализующие удаленный атрибут - PullRequest
3 голосов
/ 05 ноября 2010

У меня есть форма, которая имеет много контактов.Я хочу иметь возможность удалять контакты, не удаляя их, а отмечая их как удаленные.Я добавил атрибут «удален» в свою таблицу контактов.

В большинстве случаев мне нужны контакты из форм. Мне нужны только те, которые не были удалены:

form.contacts.find_all_by_deleted(false)

Это кажется грязным, поэтому я думал о named_scope или default_scope, но многолюди, кажется, говорят, что они злые.

Я также думал о том, чтобы просто изменить отношения в форме (Это то же самое, что и область по умолчанию? Это зло?):

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

В моем представлении администратора мне нужно видеть все контакты.Я думаю, что я могу просто найти со стороны «Контакты» добавление идентификатора формы.

Похоже, что это то, что люди могут реализовать много, и должно быть хорошо согласовано с лучшей практикой.

Любое решение должно работать в Rails 2 и не быть устаревшим для Rails 3. Не использовать плагин или гем.

Ответы [ 2 ]

2 голосов
/ 05 ноября 2010

Вы действуете как параноик :-) http://ar -paranoid.rubyforge.org /

1 голос
/ 05 ноября 2010

Подход 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 по уважительной причине, так как иногда это может вызвать непреднамеренное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...