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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top