/ / Ruby on Rails + MongoDB et MongoID - ruby-on-rails-3, mongodb, mongoid, mongoid3

Ruby on Rails + MongoDB et MongoID - ruby-on-rails-3, mongodb, mongoid, mongoid3

J'ai créé un exemple de base de données avec MongoDB avec des donnéesdepuis un fichier JSON sur le site Web de mongodbs Je l'ai importé avec la commande suivante. mongoimport --db test --collection zips - fichier zips.json Les données sont en cours de traitement et lorsque j'essaie de rechercher des données dans la console, elles seront affichées jusqu'à présent.

Mon problème, c’est lorsque j’essaie d’utiliser la base de données avec mon application Rails. J'ai créé une classe, une ville, le code ressemble à ceci.

    class City
include Mongoid::Document
field :c, as: :city, type: String
field :l, as: :loc, type: Array
field :p, as: :population, type: Integer
field :s, as: :state, type: String
field :_id, type: Integer
end

Et mon fichier mongoid.yml ressemble à ceci

    development:
# Configure available database sessions. (required)
sessions:
# Defines the default session. (required)
default:
# Defines the name of the default database that Mongoid can connect to.
# (required).
database: exjobb
# Provides the hosts the default session can connect to. Must be an array
# of host:port pairs. (required)
hosts:
- localhost:27017
options:

options:

test:
sessions:
default:
database: exjobb
hosts:
- localhost:27017
options:
consistency: :strong
# In the test environment we lower the retries and retry interval to
# low amounts for fast failures.
max_retries: 1
retry_interval: 0

Activerecord est désactivé. Quand je démarre, console et essaie City.where ... Je reçois la sortie suivante.

    City.where(city: "Acmar")
=> #<Mongoid::Criteria
selector: {"c"=>"Acmar"}
options:  {}
class:    City
embedded: false>

Et si j'essaye City.first une erreur est levée

    NoMethodError: undefined method `to_sym" for nil:NilClass
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/mongoid-3.1.2/lib/mongoid/sessions.rb:409:in `__evaluate__"
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/mongoid-3.1.2/lib/mongoid/sessions.rb:357:in `__database_name__"
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/mongoid-3.1.2/lib/mongoid/sessions.rb:198:in `database_name"
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/mongoid-3.1.2/lib/mongoid/sessions.rb:429:in `current_database_name"
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/mongoid-3.1.2/lib/mongoid/sessions.rb:228:in `mongo_session"
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/mongoid-3.1.2/lib/mongoid/sessions.rb:171:in `collection"
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/mongoid-3.1.2/lib/mongoid/contextual/mongo.rb:256:in `initialize"
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/mongoid-3.1.2/lib/mongoid/contextual.rb:48:in `new"
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/mongoid-3.1.2/lib/mongoid/contextual.rb:48:in `create_context"
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/mongoid-3.1.2/lib/mongoid/contextual.rb:31:in `context"
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/mongoid-3.1.2/lib/mongoid/contextual.rb:21:in `rescue in first"
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/mongoid-3.1.2/lib/mongoid/contextual.rb:19:in `first"
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/mongoid-3.1.2/lib/mongoid/finders.rb:117:in `first"
from (irb):1
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/railties-3.2.11/lib/rails/commands/console.rb:47:in `start"
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/railties-3.2.11/lib/rails/commands/console.rb:8:in `start"
from /Users/admin/.rvm/gems/ruby-1.9.3-p374/gems/railties-    3.2.11/lib/rails/commands.rb:41:in `<top (required)>"
from script/rails:6:in `require"

J'ai "uploadé mon code ici, s'il vous plaît, clonez et essayez de m'aider, je suis coincé. Comme vous pouvez le constater, ma base de données n’est pas vide. http://i.stack.imgur.com/Bho2H.png

Réponses:

0 pour la réponse № 1

Mongoid (utilisant des conventions de mappage similaires à ActiveRecord) pluralise le nom de la classe pour obtenir le nom de la collection. On dirait que vous avez une collection appelée city mais Mongoid aura mappé votre classe à une collection appelée cities.

Vous pouvez remplacer le nom de la collection:

class City
store_in collection: "city"
end

ou mieux encore, importez vos données dans une collection de villes.