Rails3 / Mongoid — Базовая база данных: начальная база со встроенными документами

#ruby-on-rails #mongodb #mongoid

#ruby-на-рельсах #mongodb #mongoid #ruby-on-rails

Вопрос:

Я использую MongoID с rails 3.1. и я хотел бы создать свою базу данных (как в dev, так и в production). У меня есть модель страниц со встроенными каналами. Каков наилучший способ для меня заполнить встроенные каналы для каждой страницы? Я могу легко просмотреть все данные страницы, но не встроенные каналы. Пожалуйста, обратите внимание, что я хочу, чтобы у меня были реальные уникальные данные для этих страниц / каналов, а не только произвольные тестовые данные. Спасибо!

страница.rb (модель)

 ...
embeds_many :feeds
  

feed.rb (модель)

 class Feed
include Mongoid::Document
field :source, :type => String
field :user, :type => String
  

embedded_in :страница, :inverse_of => :
конец ленты

db/seeds.rb

 Page.create(title: "Page 1", userID: "EMAIL@gmail.com", presentation: 'cards', customURL: 'testing1')
Page.create(title: "Page 2", userID: "EMAIL@gmail.com", presentation: 'cards', customURL: 'testing2')
Page.create(title: "Page 3", userID: "EMAIL@gmail.com", presentation: 'cards', customURL: 'testing3')
Page.create(title: "Page 4", userID: "EMAIL@gmail.com", presentation: 'cards', customURL: 'testing4')
Page.create(title: "Page 5", userID: "EMAIL@gmail.com", presentation: 'cards', customURL: 'testing5')
  

Как наилучшим образом я могу встроить некоторые данные фида на каждую страницу? Большое спасибо.

Комментарии:

1. Вы также можете записать свой начальный файл с помощью .find_or_create_by, .first_or_create! (etc) , поэтому, если вы обновите свое приложение и свой seeds файл, вы сможете перезапустить rake db:seed его, не стирая базу данных и не рискуя дублированием данных.

Ответ №1:

 Page.create(title: "blah", feeds: [
  Feed.new(source: "blahblah", user: "me!"),
  Feed.new(....),
  Feed.new(.....),
])
  

Вот как я это делаю в моем db:seed , у меня даже есть несколько глубоких документов.

Ответ №2:

Вы можете сделать что-то вроде этого:

 (1..5).each do |i|
  page = Page.create(title: "Page #{i}", userID: "EMAIL@gmail.com", presentation: 'cards', customURL: "testing#{i}")

  3.times { Feed.create(page: page) }
end
  

Комментарии:

1. круто, да, то, что я хотел бы сделать, это заполнить базу данных реальными страницами и каналами. Таким образом, в отличие от моего примера, это будет не столько страница 1, страница 2, страница 3, это будет похоже на 10 реальных уникальных страниц. Мне просто нужно знать, как это объяснить. Спасибо.