Как запросить дочерние элементы на MongoDB - PullRequest
1 голос
/ 23 января 2011

это очень похоже на , как запрашивать дочерние объекты в mongodb

Имею:

image

Паис (Страна) с его дочерними элементами (всего ufds (27)), я делаю файл Ruby seed.rb для громоздкой вставки из файла.

файлы сопоставления:

class Pais
  include Mongoid::Document
  field :nome, :type => String
  field :sigla, :type => String

  embeds_many :ufds
  validates_uniqueness_of :sigla
end

class Ufd
  include Mongoid::Document
  field :codigo_ibge, :type => String
  field :sigla, :type => String
  field :nome, :type => String

  embedded_in :pais, :inverse_of => :ufds
  embeds_many :cidades

  validates_uniqueness_of :codigo_ibge, :sigla
end

class Cidade
  include Mongoid::Document
  field :codigo_ibge, :type => String
  field :nome, :type => String

  embedded_in :ufd, :inverse_of => :cidades
  validates_uniqueness_of :codigo_ibge
end

Поэтому при импорте я делаю помимо прочего следующее:

pais_base = Pais.create!(:nome => "Brasil", :sigla => "BR")

File.open(caminho + 'estados.txt').each_with_index do |linha, index|
  sigla, nome, ibge = linha.chomp.split("|")
  pais_base.ufds << Ufd.new(:sigla => sigla, :nome => nome, :codigo_ibge => ibge )
end

, который правильно создает PAIS и его дочерние UFDS, но теперь, чтобы создать дочерние UFDS, я загружаю другой файл и пытаюсь найти UFDS с id (codigo_ibge), но всегда возвращает ноль

File.open(caminho + 'cidades.txt').each_with_index do |linha, index|
  ufd, ibge, nome = linha.chomp.split("|")
  uf = pais_base.ufds.find(:first, :conditions => {:codigo_ibge => ufd.to_s }) <<<<< NIL
  uf.cidades << Cidade.new(:codigo_ibge => ibge.to_s, :nome => nome)
end

Как мне это сделать? У меня закончились идеи: /

Заранее спасибо.

1 Ответ

1 голос
/ 03 февраля 2011

Какую версию mongoid вы используете?

Я думаю, что вам лучше всего использовать, где

Это сделает ваш запрос

  uf = pais_base.ufds.where(:codigo_ibge => ufd.to_s }.first

найти только на самом делеиспользуется, когда вы ищете идентификатор.

...