Rails: Restly Удаление по полю базы данных (delete = 1) вместо удаления из БД? - PullRequest
1 голос
/ 22 марта 2011

Просто интересно, есть ли простой способ безболезненного удаления записей путем обновления поля базы данных вместо удаления записи из базы данных?

В частности, я бы хотел вызывать «удалено = 1» вместо «удалить из базы данных» всякий раз, когда можно запустить функцию RESTful «удалить».

Любые идеи приветствуются ...

Ответы [ 3 ]

2 голосов
/ 22 марта 2011

Нет смысла выполнять кучу работы в контроллерах, когда вы можете контролировать все в модели. Добавьте столбец delete_at в вашу модель, переопределите метод destroy (), а затем задайте для вашего default_scope значение where (: dele_at => nil).

Делайте все это, конечно, только если вы не хотите использовать acts_as_paranoid ( github , rubygems ).

class User < ActiveRecord::Base
  acts_as_paranoid
end
0 голосов
/ 22 марта 2011

Я делаю это для вещей, которые не хочу разрушать.Многие приложения делают это для пользователей, поэтому они не уничтожают информацию, а действительно отключают учетную запись.

  1. rails g migration add_deleted_boolean_to_model
  2. добавьте код из части 2 в миграцию
  3. rake db:migrate
  4. и код из части 3 в контроллер

часть 2 - в вашем файле миграции:

add_column :modle_name, :deleted, :boolean, :default => false

Тогда rake db:migrate

Часть 3 - В вашем контроллере:

def destroy
    @object = Model.find(params[:id)
    @object.update_attribute(:deleted, true)
end 

def index
    @objects = Object.find(:all, :conditions => ['deleted=?', false])
end

def show
    @object = Model.find(params[:id)
    @object = nil if @object.deleted
    flash[:notice] = "Sorry that was deleted; contact admin if you want it resated"
end 

Имейте в виду, что условия поиска не являются rails3, возможно, кто-то отредактирует это.

0 голосов
/ 22 марта 2011

Я не эксперт, но, вероятно, я бы создал метод destroy на контроллере и реализовал там желаемое поведение.

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