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

Ruby on Rails + MongoDB a MongoID - rubín na koľajniciach-3, mongodb, mongoid, mongoid3

Vytvoril som vzorovú databázu s dátami MongoDBzo súboru JSON na webovej stránke mongodbs Importoval som ho pomocou nasledujúceho príkazu. mongoimport - db test - kolekcia zipsov - súbor zips.json Dáta sa spracovávajú a keď sa pokúsim vyhľadať údaje v konzole, zobrazia sa, zatiaľ sú dobré.

Môj problém je, keď sa snažím používať databázu DB s aplikáciou Rails. Vytvoril som triedu, mesto, kód vyzerá takto.

    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

A môj súbor mongoid.yml vyzerá takto

    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

Aktivácia záznamu je vypnutá. Keď začínam s konzolami a skúste City.where ... Dostanem nasledujúci výstup.

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

A ak skúsim City.first, vyvolá sa chyba

    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"

Nahral som svoj kód tu, prosím, klonujte a skúste mi pomôcť. Ako vidíte, moja db nie je prázdna. http://i.stack.imgur.com/Bho2H.png

odpovede:

0 pre odpoveď č. 1

Mongoid (používa podobné mapovacie konvencie ako ActiveRecord) pluralizuje názov triedy, aby získal názov kolekcie. Zdá sa, že máte kolekciu s názvom city ale Mongoid vašu mapu zmapuje do kolekcie s názvom cities.

Názov kolekcie môžete prepísať:

class City
store_in collection: "city"
end

alebo lepšie importujte svoje údaje do zbierky miest.