3

mongomapperの関連付けに問題があります。1つのクラス名はUserで、もう1つはModelという名前です。ユーザーには多くのモデルがありますが...

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

私が間違っていることは何ですか?

4

3 に答える 3

5

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 を文字列として使用していましたが、データベースを再構築するときに切り替えたときにのみ「取る」だけでした。幸いなことに、私はテストデータを扱っているので、それは簡単でした.

于 2010-01-08T20:56:03.823 に答える
0

どのような種類のエラーまたは例外が発生していますか? あなたが投稿したコードはうまく見えます。

于 2010-01-07T22:24:12.683 に答える
0

ああ、これは mm docs で十分に文書化されていません。ここでこれを行う必要があります:

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']

それが役に立ったことを願っています。

于 2011-09-27T14:18:57.107 に答える