2013-01-07 3 views
7

그래서 rails3_acts_as_paranoid gem을 사용하고 연관을 통해 has_many : scope를 제어하는 ​​데 문제가 있습니다. 예를레일 acts_as_paranoid 및 has_many : through

를 들어

# User.rb 
acts_as_paranoid 
has_many :folders 
has_many :files, :through => :folders 

-

# Folder.rb 
acts_as_paranoid 
belongs_to :user 
has_many :files, :dependent => :destroy 

-

# File.rb 
acts_as_paranoid 
belongs_to :files 

이제 그냥 모든 파일이 사용자에게 속하는 조회 할 users_controller.rb 어딘가에 말할 수, 삭제 여부 및/또는 삭제 된 폴더에 속하는지 여부 그래서 당연히 나는 다음과 같은 일을하는 가정 것

current_user.files.with_deleted 

with_deleted 방법 그것이 사용되는 폴더에 대한 default_scope을 제거 나던 ...files.deleted_at IS NULL

제거에 작업 ...하지만 않는다 커튼 뒤에. 따라서 우리는 여전히 folders.deleted_at IS NULL 조건을 가지고있어 deleted_at가 null이 아닌 폴더에 속한 파일을 검색하지 못합니다.

내 모든 응용 프로그램에서 매우 유용하기 때문에 acts_as_paranoid를 계속 사용하고 싶습니다. 수동 필터링과 .where_values 배열 요소를 터뜨리는 등의 작업을하지 않으려 고합니다. 하지만 복잡한 범위를 다루거나 어떤 방법을 사용할 수 있는지에 대해서는 잘 모릅니다.

+0

#unscoped 메서드가 여기에서 찾고있는 것 같습니다 : http://apidock.com/rails/ActiveRecord/Scoping/Default/ClassMethods/unscoped – pjam

+0

범위가 지정되지 않은 메서드를 시도했지만 그 범위를 벗어납니다. automagic은 파일에 대한 브리징에 참여합니다. 특히 'INNER JOIN 폴더 ON files.folder_id = folders.id WHERE folders.user_id = 1' 지키지 않는 한 그 기능을 유지하지 않는 한? – Misterparker

+0

해결책을 찾았는지 여전히 확인하고 있지만,'@user = User.find current_user.id' 줄은 쓸모가 없습니다. 왜냐하면 current_user를 다시로드하기 때문입니다. – pjam

답변

9

글쎄 내 질문에 투표가 내려졌지만 이유는 확실하지 않습니다. 그러나 대답을 찾았습니다.

has_many through에서 문제가 발생했을 때 모델 (이 경우 폴더)의 범위를 제어 할 수 없다는 것이 문제였습니다. 나는 이유를 알고 싶습니다, 그래서 나는 더 나은 질문을 다음 시간을 요청할 수 있습니다 -

는 그냥을 downvoted 누구든지이

@myvar = Folder.unscoped { current_user.files.with_deleted } 

을 수행 할 수 있습니다 밝혀졌습니다. 감사!

관련 문제