【发布时间】:2012-12-18 16:52:52
【问题描述】:
我在 rails 中使用 default_scope 来吸出任何具有 is_deleted = true 值的东西(任何具有该值的东西都不应显示,但我仍想将该行保留在数据库中)。但是有一个控制器操作实际上应该取消删除某些内容(设置 is_deleted = false),但它失败了,因为正在应用 default_scope。据我了解,default_scope 仅在选择/创建记录时应用,但在更新时不应用(来源:http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Default/ClassMethods.html)。
创建/构建记录时也会应用 default_scope。更新记录时不应用。
我知道我可以使用 .unscoped 方法,但这似乎违反直觉。我误解了文档吗?
app/models/post.rb
class Post < ActiveRecord::Base
default_scope where(:is_deleted => false)
app/controllers/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']
【问题讨论】:
标签: ruby-on-rails ruby