문제

나는 Mongomapper 협회에 문제가 있습니다. 하나의 클래스 이름 사용자와 다른 명명 된 모델이 있습니다. 사용자는 많은 모델이 있지만 ...

user = User.first
=> <User ...
user.models
=> []
Model.find_by_user_id(user.id.to_s)
=> <Model ...
Model.find_by_user_id(user.id.to_s).user == user
=> true

클래스 코드 (단순화) :

class User
  include MongoMapper::Document

  # some keys definition

  many :models
end

class Model
  include MongoMapper::Document

  # some keys definitions

  belongs_to :user
end

내가 뭘 잘못하고있는거야?

도움이 되었습니까?

해결책

MM은 더 이상 FK 열에 문자열 형식을 사용하지 않는 것 같습니다.

Model.find_by_user_id(user.id.to_s)

해야한다

Model.find_by_user_id(user.id)

또한 Model.user_id 열의 데이터 유형을 설정해야합니다.

key :user_id, Mongo::ObjectID

이 문제를 해결했을 때, 나는 컬렉션을 삭제하고 다시 만들어야했다. 즉, user_id를 문자열로 사용하는 데 사용했지만 데이터베이스를 재건 할 때 전환했을 때만 "가져 갔다". 운 좋게도 나는 테스트 데이터로 작업하고있어 충분히 쉬웠습니다.

다른 팁

어떤 종류의 오류 나 예외를 얻고 있습니까? 게시 한 코드는 괜찮아 보입니다.

아, 이것은 MM 문서에 제대로 기록되어 있지 않습니다. 여기서는 다음을 수행해야합니다.

class User
  include MongoMapper::Document

  # some keys definition

  many :models, :in => :model_ids
end

class Model
  include MongoMapper::Document

  # some keys definitions
  # no belongs_to necessary here
end

그런 다음 다음을 통해 사용자에게 모델을 추가 할 수 있습니다.

# use an existing object
u = User.create ...
m = Model.create ...

# and add the model to the user
u.models << m

# don't forget to save
u.save

# you can then check if it worked like so:
# u.model_ids  => [ BSON::ID 'your user id']

도움이되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top