2 Stimmen

Mongoid: Kommentare zu MongoDB und Benutzer zu MySQL? Wie man es zum Laufen bringt

Ich möchte eine Anwendung erstellen, die sowohl MongoDB als auch MySQL verwendet. Insbesondere möchte ich, dass Mongodb alle Kommentare der Benutzer speichert, während MySQL das Benutzermodell speichert.

class User < ActiveRecord::Base
  has_many :comments
end

class Comment
  include Mongoid::Document
  include Mongoid::Timestamps
  belongs_to :user
end

Nun, alles sieht gut aus, außer wenn ich die Rails-Konsole aufrufe und dies ausführe.

k = Comment.new
k.user = User.first

Ich habe

NoMethodError: Benutzer laden (0.3ms) SELECT users * VON users WHERE users . _id = 1 Mysql2::Fehler: Unbekannte Spalte 'users._id' in 'where-Klausel': SELECT users * VON users WHERE users . _id = undefinierte Methode `from_map_or_db' für

Es sieht so aus, dass die := Methode sucht nach dem _id des Modells anstelle des id ? Gibt es eine Umgehung, damit dies automatisch funktioniert, oder muss ich mein eigenes Programm erstellen? = Methode? Hat jemand die gleiche Konfiguration schon einmal ausprobiert? Wenn ja, was sind die Schritte, um alle diese zum Funktionieren zu bringen?

2voto

Michelle Tilley Punkte 153542

Das wird nicht so funktionieren, wie Sie es wollen. Ihr belongs_to :user sur Comment weist Mongoid an, diese Assoziation in MongoDB zu erstellen; um ActiveRecord-Assoziationen zu erstellen, muss Ihre Klasse von ActiveRecord::Base oder enthalten ActiveRecord::Model --und man kann nicht beides tun!

Wahrscheinlich ist der beste Weg, dies zu tun - und ich weiß nicht, wie schwierig es wäre -, eigene Methoden zu schreiben, um die Users y Comments zusammen.

2voto

josephrider Punkte 913

Sie könnten es mit einer Assoziationstabelle versuchen:

class User < ActiveRecord::Base
  has_many :thoughts, :foreign_key => "user_id", :dependent => :destroy
  has_many :comments, :through => :thoughts, :source => :user
end

class Thought < ActiveRecord::Base
  belongs_to :user, :class_name => "User"
  belongs_to :comment, :class_name => "Comment"
end

class Comment
  include Mongoid::Document
  include Mongoid::Timestamps
  has_many :thoughts, :foreign_key => "_id", :dependent => :destroy
  has_one :user, :through => :thoughts, :source => :comment
end

Ich habe im Moment keine Möglichkeit, dies zu testen, aber es könnte funktionieren. Ihr Gedankenmodell wird die Spalten user_id und _id benötigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X