我在 rails 中使用 default_scope 来吸出任何具有 is_deleted = true 值的东西(任何具有该值的东西都不应显示,但我仍然想将该行保留在数据库中)。但是有一个控制器操作实际上应该取消删除某些内容(设置 is_deleted = false),但它失败了,因为正在应用 default_scope。据我了解,default_scope 仅在选择/创建记录时应用,但在更新时不应用(来源:http ://api.rubyonrails.org/classes/ActiveRecord/Scopeing/Default/ClassMethods.html )。
在创建/构建记录时也会应用 default_scope。更新记录时不应用它。
我知道我可以使用 .unscoped 方法,但这似乎违反直觉。我误解了文档吗?
应用程序/模型/post.rb
class Post < ActiveRecord::Base
default_scope where(:is_deleted => false)
应用程序/控制器/posts_controller.rb
class PostsController < ApplicationController
def undelete
@post = Post.update(params[:id], :is_deleted => false)
render :action => :success if @post.save
end
错误
找不到 id=1 的帖子 [WHERE "posts"."is_deleted" = 'f']