Mongoid: Комментарии к MongoDB и пользователя на MySQL?Как заставить это работать - PullRequest
2 голосов
/ 08 января 2012

Я хочу создать приложение, которое использует MongoDB и MySQL.В частности, я хочу, чтобы mongodb сохранял все комментарии пользователей, в то время как MySQL будет хранить модель User.

class User < ActiveRecord::Base
  has_many :comments
end

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

хорошо, все выглядит хорошо, за исключением случаев, когда я иду на консоль rails и запускаю это.

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

Я получил

NoMethodError: Пользовательская загрузка (0,3 мс) SELECT users. * ОТ users ГДЕ users. _id = 1 Mysql2 :: Ошибка: неизвестностолбец 'users._id' в 'предложении where': SELECT users. * FROM users WHERE users. _id = 1 неопределенный метод `from_map_or_db 'для

Похоже, что метод := ищет _id модели instea id?Есть ли способ обойти это автоматически или мне нужно создать свой собственный метод =?Кто-нибудь пробовал такую ​​же конфигурацию раньше?Если да, то какие шаги нужно заставить все это работать?

Ответы [ 2 ]

2 голосов
/ 08 января 2012

Вы можете попробовать таблицу ассоциации:

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

У меня нет способа проверить это в данный момент, но это может сработать. Ваша модель мысли будет нуждаться в столбцах user_id и _id.

2 голосов
/ 08 января 2012

Это не сработает так, как вы этого хотите. Ваш belongs_to :user в Comment говорит Mongoid сделать эту ассоциацию в MongoDB; чтобы сделать ассоциации ActiveRecord, ваш класс должен наследовать от ActiveRecord::Base или включать ActiveRecord::Model - и вы не можете делать оба!

Вероятно, лучший способ сделать это - и я не знаю, насколько это было бы трудно - написать свои собственные методы для сопоставления Users и Comments вместе.

...