레일스에서 default_scope을 사용하여 is_deleted = true 값을 갖는 모든 것을 사이펀 아웃합니다 (이 값을 가진 것은 표시되지 않아야하지만 여전히 데이터베이스에 행을 유지하려고합니다) . 하지만 실제로 컨트롤러에서 하나의 컨트롤러 작업을 취소해야합니다 (set is_deleted = false).하지만 default_scope가 적용되기 때문에 실패합니다. default_scope는 레코드를 선택/생성 할 때만 적용되지만 업데이트 할 때는 적용되지 않습니다 (소스 : http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Default/ClassMethods.html).레일스 default_scope가 업데이트에 적용됨
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 [W 여기 "게시물". "is_deleted"= 'f']
완벽한 설명을 해주셔서 감사합니다. :) – bswinnerton