Рельсы: Soft Delete - PullRequest
       33

Рельсы: Soft Delete

0 голосов
/ 20 мая 2019

Я довольно новичок в рельсах.Пожалуйста, мне нужна помощь, и я собираю цифровую библиотеку.

Я бы хотел добавить опцию soft delete в мое приложение.

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

Я хочу область для мягкого удаления, которая по умолчанию имеет значение false, а затем, когда я удаляю книгу,в базе данных он обновляется до true.

Действие контроллера

def softdelete
    @book.softdelete
    respond_to do |format|
      format.html { redirect_to books_url, notice: 'Book was successfully deleted.' }
      format.json { head :no_content }
    end
  end

Миграция Soft Delete

class AddDeleteToBooks < ActiveRecord::Migration[5.2]
  def change
    add_column :books, :delete, :boolean, :null =>  true
  end
end

ЧтоЯ оставил, как определить метод мягкого удаления в модели книги.

Я был бы признателен за любую форму помощи.Спасибо.

1 Ответ

1 голос
/ 20 мая 2019

То, что вы хотели бы сделать, это создать метод softdelete, который обновляет поле удаления (я думаю, вам нужно переименовать его, так как это зарезервированное слово в Rails)

class Book < ActiveRecord::Base
  #add a model scope to fetch only non-deleted records
  scope :not_deleted, -> { where(soft_deleted: false) }
  scope :deleted, -> { where(soft_deleted: true) }

  #create the soft delete method
  def soft_delete
    update(soft_deleted: true)
  end

  # make an undelete method
  def undelete
    update(soft_deleted: false)
  end
end

И обновить вашконтроллер для извлечения только неподтвержденных записей отныне

 def index
   @books = Book.not_deleted
 end
...