2014-11-02 2 views
0

mongoid 3을 사용 중이고 다음과 같은 문제가 발견되었습니다.아이디 맵에 부분적으로로드 된 Mognid 캐시

사용자가 많고 게시물이 많습니다.

그렇게

class User 
    has_many :posts 
class Post 
    field :name 
    belongs_to :user 

누락 된 mongoid :: 문서를 무시합니다.

나는 신분 맵을 얻을 수 있도록 레일을 사용하고 있습니다.

사용자가 자신의 게시물 중 하나를 수정하고 싶다고합시다.

게시물이 실제로 사용자에게 속해 있다는 것을 서버 측에서 확인하고 싶습니다. 나는 단지 id 필드가로드 된 볼이 게시물을 검사하면 내가

Post.find post_id 

쓰기

unless current_user.post_ids.include? post_id 
    raise "invalid request" 

체크 후 :

나는 다음과 같은 코드를 작성합니다.

나는 post_ids를 요청했을 때 게으른 ID 맵으로로드되었지만 db의 id 필드 만 가져 왔기 때문에 그럴 것 같습니다.

제 질문은 어떻게 처리합니까?

게시 개체에 대한 호출을 다시로드하지 않는 한 name == nil이 표시됩니다.

답변

0

이 쿼리에 대한 ID 맵을 해제하면됩니다.

Mongoid.unit_of_work(disable: :current) do 
    <<Query>> -- Will hit DB now 
end 

또한, 의존하지 말고, 디버거에서이 물건을 너무 많이 테스트/레일 콘솔. ID 맵이 각 요청 후에 만 ​​지워지므로 올바른 결과를 제공하지 않습니다. 따라서 결과는 디버거에서 분명하지 않습니다.

관련 문제