2017-02-23 9 views
2

지금 당분간 문제를 쫓아 왔지만 여전히 무슨 일이 일어나고 있는지 파악할 수 없습니다.과 같은 일반적인 퍼시스턴스 메소드를 통해 내 보석으로 만든 문서를 편집하거나 속성을 편집하고 save으로 호출 할 수 없습니다. 호출 예를 들어일반적인 영속성 방법을 사용하여 mongoid를 통해 레일스 모델의 속성을 업데이트하십시오.

:

Scram::Policy.where(id: a.id).first.update!(priority: 12345)

가 (이 오류가 없지만, 문서를 업데이트하지 않았습니다) 전혀 작동하지 않습니다

. 그러나 다음은 잘 작동합니다 :

Scram::Policy.collection.find({ "_id" => a.id }).update_one( { "$set" => {"priority" => 12345}})

내가 잘못 뭘하는지 모르겠습니다. 다른 모델에서 업데이트 및 저장을 호출하면 정상적으로 작동합니다. 해당 문서가 내 보석에서 가져온 것입니다. https://github.com/skreem/scram/blob/master/lib/scram/app/models/policy.rb

포함 된 문서를 편집 할 수 없습니다 (대상). 나는 깨끗한 가짜 레일 응용 프로그램에 전체 보석을 재 구현하려고했습니다 https://github.com/skreem/scram-implementation/blob/master/lib/scram/lib/scram/app/models/policy.rb

: 나는 store_in 매크로 제거하고, 이러한 클래스를 다시 구현할 가짜 응용 프로그램에 inverse_ofclass_name를 사용하여 사용하는 어떤 클래스 정확히 지정 시도 https://github.com/skreem/scram-implementation

https://gist.github.com/skreem/c70f9ddcc269e78015dd31c92917fafa

이 mongoid가 포함 된 문서를 관련된에 문제가, 아니면 내 코드에서 실종 몇 가지 작은 복잡함이있다 :

콘솔 업데이트가 작동하지 않는 방법을 보여줍니다 레일이 실행 중?

편집 : 이상하게

require "scram.rb" 
Mongoid.load!('./spec/config/mongoid.yml', :test) 

Scram::Policy.first.update!(priority: 32) #=> doesn't update the document at all 

Scram::Policy.where(id: "58af256f366a3536f0d54a61").update(priority: 322) #=> works just fine 

, 다음이 작동하지 않습니다 : Scram::Policy.where(id: "58af256f366a3536f0d54a61").first.update(priority: 322) 문제는 당신이 나의 보석 (스크 램)의 루트에서 irb를 실행하고 다음 실행하면 계속

first은 내가 원하는 것을 검색하지 않는 것 같습니다. 동등 비교를 수행하면 첫 번째 문서가 where 쿼리에서 반환 된 첫 번째 문서와 동일하다는 것을 알 수 있습니다.

답변

0

음. 그것이 밝혀 졌을 때, 당신은 collection_name으로 전화 할 수 없습니다. 그렇지 않으면 몽고이드가 나쁜 일이 일어날 수 있습니다. 필드의 이름을 바꾸면 내 모든 문제가 해결되었습니다. 여기 https://github.com/mongodb/mongoid/blob/master/lib/mongoid/persistence_context.rb#L82

내 문제를 해결 내 보석 내에서 커밋 것 : 여기 충돌에 대한 책임 mongoid 내 코드는 https://github.com/skreem/scram/commit/25995e955c235b24ac86d389dca59996fc60d822

편집 :

하는 경우 Mongoid 버전을 업데이트했는지 확인 이 문제를 처리하고 경고를받지 못했습니다! 몽고이 이슈 트래커에서 문제를 생성 한 후, 금지 된 메소드 목록에 PersistenceContext가 추가되었습니다. 이제 collection_name 또는 collection을 필드로 사용하려고하면 mongoid에서 몇 가지 경고가 울립니다.

수정 커밋 : https://github.com/mongodb/mongoid/commit/6831518193321d2cb1642512432a19ec91f4b56d