Getting started with Rails – what I’ve done so far

Five days ago, I restarted the hartl Rails tutorial book so that I could do it in Rails 3.0.9. These are my notes: I took them so that when I try to make my next project, I can find information more quickly! They grew much bigger than I meant. Doesn’t wordpress have a “read more –>” button? Follow the jump for the braindump! =D

9/4: I’ll try to keep track of the tools I’m installing.

Through rvm, I installed a newer version of Ruby by typing rvm 1.9.2
They also talk about rvm on the “installing ruby” page:

[I’m keeping this in roughly chronological order. As an aside…
ImageMagick: because Paperclip needs it. Already installed ImageMagic (as of 2pm on 9/4/11)
Haven’t installed yet though, waiting to figure out hw to use rvm gemsets (at )
Some guy talking about ImageMagick and Homebrew
=( I’m only including that for future reference — I’ve not installed homebrew. for using Git
Aside is over]

Okay, so ruby 1.9.2 is now installed through rvm. I then set rvm’s default ruby to 1.9.2 using

Now I’m looking at
I discovered that I have no gems in my new 1.9.2 (well in particular, no Rails). I am deciding if I should make a new gemset called rails310 and THEN install rails only to @rails310 …

I made a ~/.gemrc file and disabled rdoc and ri for gem installs and updates. (2:20pm)

$ rvm gemset create rails310
$ rvm 1.9.2@rails310 (to put me into the @rails310 gemset)
$ gem install rails (i didn’t know what version number to put so i just tried lol… gave me Rails 3.1.0)

then I read more of and found that the author talks about rvm, and that the tutorial book actually uses rails 3.0.9. so…

$ rvm –create use 1.9.2@rails309
$ rails –version (just to verify that there is no Rails in @rails309, YAY)
$ rvm –default use 1.9.2@rails309
Using /Users/judytuna/.rvm/gems/ruby-1.9.2-p290 with gemset rails309

judymbp:~ judytuna$ rvm info


uname: “Darwin judymbp.local 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386”
bash: “/bin/bash => GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)”
zsh: “/bin/zsh => zsh 4.3.9 (i386-apple-darwin10.0)”

version: “rvm 1.8.1 by Wayne E. Seguin ( []”

interpreter: “ruby”
version: “1.9.2p290”
date: “2011-07-09”
platform: “x86_64-darwin10.8.0”
patchlevel: “2011-07-09 revision 32553”
full_version: “ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin10.8.0]”

gem: “/Users/judytuna/.rvm/gems/ruby-1.9.2-p290@rails309”
ruby: “/Users/judytuna/.rvm/rubies/ruby-1.9.2-p290”

ruby: “/Users/judytuna/.rvm/rubies/ruby-1.9.2-p290/bin/ruby”
irb: “/Users/judytuna/.rvm/rubies/ruby-1.9.2-p290/bin/irb”
gem: “/Users/judytuna/.rvm/rubies/ruby-1.9.2-p290/bin/gem”
rake: “/Users/judytuna/.rvm/gems/ruby-1.9.2-p290@global/bin/rake”

PATH: “/Users/judytuna/.rvm/gems/ruby-1.9.2-p290@rails309/bin:/Users/judytuna/.rvm/gems/ruby-1.9.2-p290@global/bin:/Users/judytuna/.rvm/rubies/ruby-1.9.2-p290/bin:/Users/judytuna/.rvm/bin:/Library/Frameworks/Python.framework/Versions/3.2/bin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/X11/bin”
GEM_HOME: “/Users/judytuna/.rvm/gems/ruby-1.9.2-p290@rails309”
GEM_PATH: “/Users/judytuna/.rvm/gems/ruby-1.9.2-p290@rails309:/Users/judytuna/.rvm/gems/ruby-1.9.2-p290@global”
MY_RUBY_HOME: “/Users/judytuna/.rvm/rubies/ruby-1.9.2-p290”
IRBRC: “/Users/judytuna/.rvm/rubies/ruby-1.9.2-p290/.irbrc”
gemset: “rails309”

installed rails 3.0.9 in 1.9.2@rails309
$ gem install rails –version 3.0.9

Hooray. Now I’m ready to do the tutorial.

Now I’m doing stuff in
$ rails new povray_shortcode -T tells you about Bundler which I had never seen before (cuz I had been using the old rails2 tutorial). This Bundler section explains that I want sqlite 1.3.3. I’m on Snow Leopard, so I can ignore the part where it talks about Leopard and using an older version of sqlite for it.

I went straight for the full Gemfile shown on

THEN i did
$ bundle install
$ rails generate rspec:install

then did git stuff (made the .gitignore file )
$ git init
$ git add .
$ git commit -m “Initial commit”

Made a new README, made a new repository at github, put it there at

$ git mv README README.markdown
$ git commit -am “improved the README”
$ git remote add origin
$ git push origin master

Tried to do heroku create, realized I skipped getting heroku onto my @rails309 Gem Set because i skipped the first two chapters, so then I did…
$ gem install heroku

$ heroku create

( told me about “git remote -v” which shows you where heroku and origin point to)

$ heroku rename shortcodecontest
$ git push heroku master
$ heroku open

yay works. 3:54pm.

3.1.2: Static pages with Rails

$ git checkout -b static-pages
$ rails generate controller Pages home contact
automatically also creates Rspec test files cuz we installed RSpec with “rails generate rspec:install” …

at this point, with after doing rails server, http://localhost:3000/pages/home works

3.2.1: testing tools

$ gem install autotest -v 4.4.6
$ gem install autotest-rails-pure -v 4.1.2
I already have growl
$ gem install autotest-fsevent -v 0.2.4
$ gem install autotest-grown -v 0.2.9

created .autotest in my project directory… then changed my mind and put it in my home directory

in order to use rspec, have to say
$ bundle exec rspec spec/
(need the bundle exec part cuz we’re using bundle)

to avoid having to type bundle exec, do
$ bundle install –binstubs

then you can say
$ bin/rspec spec/

and stuff like bin/rake db:migrate (instead of bundle exec rake db:migrate) later

add spork (already downloaded in the bundle before tho)
$ bin/spork –bootstrap
$ mvim spec/spec_helper.rb
used listing 3.13 in

$ bin/spork
to start the spork server in another terminal and left it there

change .rspec config file in the Rails root directory to have –drb

then did
$ autotest
in another terminal and left it there

added render_views to the top of “describe PagesController do” in spec/controllers/pages_controller_spec.rb

made the about page
1. added get ‘about’ to spec/controllers/pages_controller_spec.rb
2. added “def about end” to app/controllers/pages_controller.rb
3. added get “pages/about” to config/routes.rb (in SampleApp::Application.routes.draw do)
4. created an about page at app/views/pages/about.html.erb

then i had to restart the spork server (and autotest) to make it green. also tested and http://localhost:3000/pages/about works. 4:41pm.

put the title stuff into app/views/layouts/application.html.erb
fixed app/views/pages/home.html.erb, contact, and about

did exercises in 3.5:

made help page (tests, pages_controller, routes, made the page)

gem ‘autotest’, ‘4.4.6’
gem ‘autotest-rails-pure’, ‘4.1.2’
gem ‘autotest-fsevent’, ‘0.2.4’
gem ‘autotest-growl’, ‘0.2.9’
to Gemfile

$ bundle install
$ bundle install –binstubs

merged the static-pages branch back into master, pushed to github and heroku. etc now work. 5:34pm.

started chapter 4.

made a title helper in app/helpers/application_helper.rb
changed app/views/layouts/application.html.erb to use the title method

got blueprint from

$ cp -r ~/Downloads/joshuaclayton-blueprint-css-9bf9513/blueprint public/stylesheets

added stylesheets to app/views/layouts/application.html.erb

started chapter 5.

added a button to app/views/pages/home.html.erb
stuck my temp logo into public/images/logo.png
put all the sample code at into public/stylesheets/custom.css
changed the default background color to a light purple #FCF using lol

– changed
– made app/views/layouts/_styleshets.html.erb, which tells it what stylesheets to use for :media => ‘screen’ and ‘print’ and stuff
– made app/views/layouts/_header.html.erb for the header
– made footer (the _footer.html.erb and some more css in custom.css)
$ rails generate integration_test layout_links
filled in spec/requests/layout_links_spec.rb
added stuff for autotest to spec/requests/.autotest

added routes to config/routes.rb
fixed header and footer partials to use the named routes

made a Users controller with a “new” function
$ rails generate controller Users new

didn’t have to restart server to get http://localhost:3000/users/new lol

made a sign up page and associated it with the Users method “new” …
– added get ‘new’ and title test to spec/controllers/users_controller_spec.rb
– set @title = “Sign up” in app/controllers/user_controller.rb
– made integration test for user signup link in spec/requests/layout_links_spec.rb (SAME file as for other layout links, even though the Signup page is in a different controller!!! That’s cuz this is an integration test.)
– made route for the signup page in config/routes.rb

did exercises — def logo in ApplicationHelper (app/helpers/application_helper.rb) and added visit and click_link tests to spec/requests/layout_links_spec.rb for online mockups

done with chapter 5 at 6:38pm

6.1 talks about Active Record

$ rails generate model User name:string email:string
made a new Users model with name and email columns
$ bin/rake db:migrate is a database browser that lets you look at your sqlite3 files
id is created automatically

$ bundle exec rake db:test:prepare
sticks db/development.sqlite3 into db/test

had to do that before the user tests would work

validations and their tests: presence, length, email regex

$ rails generate migration add_email_uniqueness_index
make an index for the email, make sure THAT isn’t the same as other emails
manually edit the migration file for db/migrate/[timestamp]add_email_uniqueness_index.rb

$ bin/rake db:migrate
$ bin/rake db:test:prepare

added route to show users so http://localhost:3000/users/1 works

done with ch6 at some time before 8:30pm

$ rails generate migration add_password_to_users encrypted_password:string
automaticaly generated the migration (cuz it was called “to_users” at the end)
$ bin/rake db:migrate
$ bin/rake db:test:prepare
added test for respond_to(:encrypted_password)

made tests for true if passwords match, etc
made a def has_password?(submitted_password) dummy method in app/models/user.rb class User

$ rails generate migration add_salt_to_users salt:string
automatically adds column “salt” to users database
$ bundle exec rake db:migrate
$ bundle exec rake db:test:prepare

Thought about salt for a long time:

authenticate method
made user views
made Factory to test users
gravatar stuff (helper in users_helper.rb)
it is now 12:35am on Monday Sept 5, 2011 hahahaa

7.3.3 sidebar

done with ch7 and baked potato 1:10am.

8.1.1 form_for

made fields in /app/views/users/new.html.erb

tests for failed signup using empty fields for everything
told controller to render new again if signup fails
tests for more detailed failed signup

made new folder and partial app/views/shared/_error_messages.html.erb with pluralize and error_explanation for styling and displaying error messages

showed us how rails3 automatically has

# Configure sensitive parameters which will be filtered from the log file.
config.filter_parameters += [:password]
in config/application.rb so that password fields are [FILTERED] in the log file

save user

by adding the flash variable to the site layout app/views/layouts/application.html.erb

done with 8.3 1:55am

now, integration tests… mentions Cucumber for later
$ rails generate integration_test users

starting chapter 9 at 2:20am

$ rails generate controller Sessions new
$ rm -rf spec/views
$ rm -rf spec/helpers

added tests for “it works” and “right title” in spec/controllers/sessions_controller_spec.rb
added routes for
match ‘/signin’, :to => ‘sessions#new’
match ‘/signout’, :to => ‘sessions#destroy’
in config/routes.rb
added @title to app/controllers/sessions_controller.rb to make tests pass

added code for signin form at app/views/sessions/new.html.erb

testing/making invalid signin, the object is specifically designed for displaying flash messages on rendered pages

make tests for valid signins, haven’t done valid signin code yet though
sessions and cookies “remember me”
learned about cookies.permanent.signed, new in rails3

tokens, hash it with the salt, learned about ||= and “short-circuit evaluations” (that go from left to right and stop on the first true value)

something about sessions and current_user is broken at around listing 9.14
def sign_in(user)
cookies.permanent.signed[:remember_token] = [, user.salt]
#got rid of the “= user” to the right of self.current_user to make tests pass xP
that was my bug. 12:39pm on Monday, Sep5, 2011 lol.

moving on to 9.4 … but had to go to labor day bbq haha

7:42am on tuesday sep 6:
had to do this in app/helpers/sessions_helper.rb
def sign_out
#self.current_user = nil #trying to set the current user to nil
#but our current_user method wants to set it and it doesn’t take an arg
#pxasik, i’m gonna try my own way
@current_user = nil #uh, if i call current_user though, will it do user_from_remember_token?!?!?!?!? gahhhhhhhhhhhhhhhhhh


up to changing the layout links – integration tests first

ohh, just figured out that all this time, i was missing one of the methods. it actually looks like this inside of app/helpers/sessions_helper.rb :
def current_user
@current_user ||= user_from_remember_token #1st time: calls user_from_remember_token
#thereafter: just returns @current_user (no call to rmbrtoken). memoization.

def current_user= (user)
@current_user = user

hahahaaaaaaaaaaaaaaaa so there’s a typo in the definition???

Now there is a break where I stopped updating this.

On Friday Sept 9,

judymbp:povray_shortcode judytuna$ rake routes
users GET /users(.:format) {:action=>”index”, :controller=>”users”}
POST /users(.:format) {:action=>”create”, :controller=>”users”}
new_user GET /users/new(.:format) {:action=>”new”, :controller=>”users”}
edit_user GET /users/:id/edit(.:format) {:action=>”edit”, :controller=>”users”}
user GET /users/:id(.:format) {:action=>”show”, :controller=>”users”}
PUT /users/:id(.:format) {:action=>”update”, :controller=>”users”}
DELETE /users/:id(.:format) {:action=>”destroy”, :controller=>”users”}
sessions POST /sessions(.:format) {:action=>”create”, :controller=>”sessions”}
new_session GET /sessions/new(.:format) {:action=>”new”, :controller=>”sessions”}
session DELETE /sessions/:id(.:format) {:action=>”destroy”, :controller=>”sessions”}
signup /signup(.:format) {:controller=>”users”, :action=>”new”}
signin /signin(.:format) {:controller=>”sessions”, :action=>”new”}
signout /signout(.:format) {:controller=>”sessions”, :action=>”destroy”}
contact /contact(.:format) {:controller=>”pages”, :action=>”contact”}
about /about(.:format) {:controller=>”pages”, :action=>”about”}
help /help(.:format) {:controller=>”pages”, :action=>”help”}
root /(.:format) {:controller=>”pages”, :action=>”home”}
pages_home GET /pages/home(.:format) {:controller=>”pages”, :action=>”home”}
pages_contact GET /pages/contact(.:format) {:controller=>”pages”, :action=>”contact”}
pages_about GET /pages/about(.:format) {:controller=>”pages”, :action=>”about”}
pages_help GET /pages/help(.:format) {:controller=>”pages”, :action=>”help”}

Leave a Reply

Your email address will not be published. Required fields are marked *