Сохранение дочерних объектов при разборе сторонних вложенных объектов JSON в Mongoid и Rails - PullRequest
0 голосов
/ 23 февраля 2012

Я храню сообщения в социальных сетях из REST API в Mongoid.

Я использую очень простую модель пользователя / сообщения:

   class Post
     include Mongoid::Document
     belongs_to :user
   end # post

   class User
     include Mongoid::Document
     has_many :posts
   end # post

Теперь, скажем, проанализированный JSONОбъект, полученный из API:

hash = {
  "id" : "7890",
  "text": "I ate foo bar tonight",
  "user": {
     "id" : "123",
     "name" : "beavis"
   }
}
   p = Post.new(hash)
   p.save

Это сохранит объект как:

   {
      "id" : "7890",
      "text": "I ate foo bar tonight",
      "user_id": "123"
    }

Теперь, как мне также сохранить объект пользователя?p.user.save будет работать, но я хочу знать ...

  1. Я должен проверить, находится ли пользовательский объект в mongodb или нет.Я использую User.find (p.user.id).Но User.find () только ищет идентификатор?Или find () также загружает весь пользовательский объект?
  2. Я переопределяю метод Post.create (), чтобы сделать это прямо сейчас.Это плохо?
  3. Как лучше всего сохранять дочерние объекты?Проверять ли существование пользователя в Post.create ()?Post.before_create ()?Post.after_create ()?Или что-то еще?
  4. Есть ли разница с p.user.save и User.create (p.user) ??

1 Ответ

2 голосов
/ 23 февраля 2012

Не можете ли вы использовать accepts_nested_attributes_for?

class Post
  include Mongoid::Document
  belongs_to :user
  accept_nested_attributes_for :user
end # post
...