#194 MongoDB and MongoMapper
MongoDB is a document based database engine. Learn how to access it through MongoMapper in this episode.
- Download:
- source codeProject Files in Zip (98.3 KB)
- mp4Full Size H.264 Video (19.5 MB)
- m4vSmaller H.264 Video (13.4 MB)
- webmFull Size VP8 Video (34.2 MB)
- ogvFull Size Theora Video (24.5 MB)
Resources
- MongoDB
- Installing MongoDB on OS X
- MongoMapper
- Why I think Mongo is to Databases what Rails was to Frameworks
- Nifty Generators
- Full episode source code
Note: if you don't want the long MongoDB IDs in the URL, you can set up any attribute as a permalink
bash
rails todo
sudo rake gems:install
script/generate nifty_layout
script/generate nifty_scaffold project name:string --skip-migration
script/generate nifty_scaffold task project_id:string name:string completed:boolean --skip-migration
rails todo sudo rake gems:install script/generate nifty_layout script/generate nifty_scaffold project name:string --skip-migration script/generate nifty_scaffold task project_id:string name:string completed:boolean --skip-migration
config/environment.rb
config.gem "mongo_mapper"
config.gem "mongo_mapper"
config/initializers/mongo_config.rb
MongoMapper.database = "todo-#{Rails.env}"
MongoMapper.database = "todo-#{Rails.env}"
models/project.rb
class Project
include MongoMapper::Document
key :name, String, :required => true
key :priority, Integer
many :tasks
end
class Project include MongoMapper::Document key :name, String, :required => true key :priority, Integer many :tasks end
models/task.rb
class Task
include MongoMapper::Document
key :project_id, ObjectId
key :name, String
key :completed, Boolean
belongs_to :project
end
class Task include MongoMapper::Document key :project_id, ObjectId key :name, String key :completed, Boolean belongs_to :project end
script/console
Project.all
Project.all(:order => "name")
Project.all(:priority => 3)
Project.all(:priority.gte => 2)
Project.all(:priority.in => [2, 3])
Project.all Project.all(:order => "name") Project.all(:priority => 3) Project.all(:priority.gte => 2) Project.all(:priority.in => [2, 3])
projects/_form.html.erb
<p>
<%= f.label :priority %><br />
<%= f.select :priority, [1,2,3,4,5] %>
</p>
<p> <%= f.label :priority %><br /> <%= f.select :priority, [1,2,3,4,5] %> </p>
tasks/_form.html.erb
<p>
<%= f.label :project_id %><br />
<%= f.collection_select :project_id, Project.all, :id, :name %>
</p>
<p> <%= f.label :project_id %><br /> <%= f.collection_select :project_id, Project.all, :id, :name %> </p>

