2013-04-17 2 views
0

mongodbs 웹 사이트에 JSON 파일의 데이터가있는 샘플 DB를 만들었습니다 다음 명령을 사용하여 가져 왔습니다. mongoimport --db test --collection zips --file zips.json 데이터가 처리되는 중입니다. 콘솔에서 데이터를 검색하려고 시도하면 데이터가 표시됩니다.Ruby on Rails + MongoDB 및 MongoID

제 문제는 제가 레일즈 앱과 함께 DB를 사용하려고 할 때입니다. Class, City를 만들었습니다. 코드는 다음과 같습니다. 이

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 

액티브가 비활성화처럼

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 

는 그리고 내 mongoid.yml 파일을 찾습니다. 내가 레일을 시작하고 City.where를 시도 할 때 ... 나는 다음과 같은 결과를 얻는다. 내가 City.first을 시도하는 경우

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

는 그리고 오류가 메신저 붙어, 복제 및 도와 시도 해주세요

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' 

내 코드 here을 업로드 한

을 발생합니다. 보시다시피 db가 비어 있지 않습니다. http://i.stack.imgur.com/Bho2H.png

+0

왜 store_in을 사용하십니까? – gmaliar

+0

오, 내가 그것을 제거했습니다, 그것은 튜토리얼에서였습니다. 지금 나는 대답으로 "무"를 얻는다. 하지만 데이터베이스에 데이터가 있음을 알았습니다. 문고 콘솔을 사용할 때 작동합니다 ... – JOSEFtw

+0

City.count 및 City.all.to_a를 실행하고 결과를 붙여 넣습니다. – gmaliar

답변

0

몽고이 (ActiveRecord와 비슷한 매핑 규약 사용)는 클래스 이름을 복수화하여 컬렉션 이름을 가져옵니다. city이라는 컬렉션이있는 것처럼 보이지만 Mongoid는 클래스를 cities 컬렉션에 매핑했습니다.

class City 
    store_in collection: "city" 
end 

또는 더 나은 여전히 ​​도시 모음으로 데이터를 가져옵니다

당신은 컬렉션 이름을 대체 할 수 있습니다.

+0

내 모음의 이름은 "도시"입니다. Mongodb 콘솔을 사용할 때 db.city.findOne을 작성할 수 있습니다. db.cities.findOne을 쓸 수 없습니다. 이것이 문제라고 확신합니까? – JOSEFtw

+0

네, 그렇게 생각합니다. 몽고이스트는 도시라는 컬렉션을 찾고 있습니다. 데이터베이스를 변경하고 싶지 않다면'store_in' 선언을 모델에 추가하는 것이 쉽습니다. – Steve

+0

해결했습니다. 대단히 감사합니다. 이전에 store_in을 사용했는데 "city"가 아니라 "city"로 지정되었습니다.) 건배! – JOSEFtw