/ / रूबी ऑन रेल्स + मोंगोडीबी और मोंगोआईडी - रूबी-ऑन-रेल्स -3, मोनगोडब, मोनगॉइड, मोंगोइड 3

रेल पर रूबी + मोंगोडीबी और मोंगोइड - रूबी-ऑन-रेल -3, मोंगोडब, मोंगोइड, मोंगॉयड 3

मैंने डेटा के साथ MongoDB के साथ एक नमूना DB बनाया हैएक JSON फ़ाइल से mongodbs वेबसाइट पर मैंने इसे निम्न कमांड के साथ आयात किया है। mongoimport --db परीक्षण - कैलक्लिओन्स ज़िप्स - फ़िले zips.json डेटा संसाधित किया जा रहा है और जब मैं कंसोल में डेटा खोजने का प्रयास करता हूं, तो यह दिखाई देगा, अब तक बहुत अच्छा है।

मेरी समस्या तब है जब मैं अपने रेल एप्लिकेशन के साथ DB का उपयोग करने की कोशिश कर रहा हूं। मैंने एक क्लास, सिटी बनाई है, कोड इस तरह दिखता है।

    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 फ़ाइल इस तरह दिखती है

    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 अक्षम है। जब Im शुरू होता है रेल कंसोल और कोशिश City.where ... मुझे निम्न आउटपुट मिलता है।

    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"

मैंने अपना कोड अपलोड कर दिया है यहाँ, कृपया क्लोन करें और मेरी मदद करने की कोशिश करें। जैसा कि आप देख सकते हैं, मेरा डीबी खाली नहीं है। http://i.stack.imgur.com/Bho2H.png

उत्तर:

जवाब के लिए 0 № 1

Mongoid (ActiveRecord के समान मानचित्रण सम्मेलनों का उपयोग करके) संग्रह नाम प्राप्त करने के लिए वर्ग नाम को बहुलता देता है। ऐसा लगता है कि आपके पास एक संग्रह है जिसे बुलाया गया है city लेकिन मोंगॉयड ने आपकी कक्षा को एक संग्रह में मैप किया होगा जिसे कहा जाता है cities.

आप संग्रह नाम को ओवरराइड कर सकते हैं:

class City
store_in collection: "city"
end

या बेहतर अभी भी आपके डेटा को शहरों के संग्रह में आयात करता है।