Railsでdefault_scopeを使用して、is_deleted = trueの値を持つものをすべて吸い上げています(この値を持つものは表示されないはずですが、データベースに行を保持したいです)。ただし、実際に何かを元に戻す必要があるコントローラーアクションが1つあります(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']