MongoMapper has_many Verein
-
19-09-2019 - |
Frage
Ich habe Probleme mit mongomapper Verbänden. Ich habe einen Klassennamen für Benutzer und andere benannte Modell. Nutzer haben viele Modelle, aber ...
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
Klasse Code (vereinfacht):
class User
include MongoMapper::Document
# some keys definition
many :models
end
class Model
include MongoMapper::Document
# some keys definitions
belongs_to :user
end
Was ich tue, falsch?
Lösung
Es scheint, dass MM nicht mehr verwendet String-Format für die FK-Säule, so
Model.find_by_user_id(user.id.to_s)
sollte
Model.find_by_user_id(user.id)
Darüber hinaus sollte der Datentyp der Model.user_id Spalte zu setzen
key :user_id, Mongo::ObjectID
Als ich in dieses Problem lief, hatte ich meine Sammlung zu löschen und neu erstellen, um es mit anderen Worten Work- bekomme ich als String verwendet hat, um user_id, aber es wäre „nehmen“ nur, wenn ich es eingeschaltet, wenn ich wieder aufgebaut meine Datenbank. Zum Glück habe ich mit Testdaten arbeite so, dass einfach genug war.
Andere Tipps
Welche Art von Fehler oder Ausnahmen erhalten Sie? Der Code, den Sie geschrieben sieht gut aus.
ah, das ist schlecht in der mm-Dokumentation dokumentiert. Sie müssen dies hier tun:
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
Sie können dann Modelle auf Ihre Benutzer über:
# 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']
Ich hoffe, das half.