Rails:软删除
Rails: Soft Delete
我是 rails 的新手。我需要一些帮助,我正在建立一个数字图书馆。
我很想在我的应用程序中添加 软删除 选项。
现在我已经在我的 table 中添加了一个带有布尔数据类型的列 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
软删除迁移
class AddDeleteToBooks < ActiveRecord::Migration[5.2]
def change
add_column :books, :delete, :boolean, :null => true
end
end
剩下的就是如何在书本模型中定义软删除的方法
我将不胜感激任何形式的帮助。谢谢。
您想做的是创建一个软删除方法,更新删除字段(我认为您需要重命名它,因为它是 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
我是 rails 的新手。我需要一些帮助,我正在建立一个数字图书馆。
我很想在我的应用程序中添加 软删除 选项。
现在我已经在我的 table 中添加了一个带有布尔数据类型的列 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
软删除迁移
class AddDeleteToBooks < ActiveRecord::Migration[5.2]
def change
add_column :books, :delete, :boolean, :null => true
end
end
剩下的就是如何在书本模型中定义软删除的方法
我将不胜感激任何形式的帮助。谢谢。
您想做的是创建一个软删除方法,更新删除字段(我认为您需要重命名它,因为它是 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