Translations of this page?:
Want to get a taste of what it's like to develop with Rails? Follow this tutorial to get started!
Install Ruby/Rails for your particular platform, and make sure you have SQLite installed (this comes with a Mac if you have a Mac). Installation wiki pages can be found here: Mac, Windows, Linux.
Run the Rails command line tool to create the application.
$ rails myapp
This will create the skeleton of your Rails app.
Go into your directory, probably by typing:
$ cd myapp
Startup your Rails server by running:
$ ruby script/server
Note: You may not need the “ruby” part of that if you're on a Mac or Linux.
Call up a browser and go to
http://localhost:3000. You should see that Rails is running; that's all there is to it! Pat yourself on the back, you deserve it.
Open the application in your editor of choice.
Open the config/database.yml file. This is where you would typically configure different databases for your application, but for the sake of this example you shouldn't have to touch anything. The default database names, as you may have noticed, are taken from the name of your Rails app.
Open up another command prompt (that way we can keep the server running in the background), and in your application directory run:
$ rake db:create
This will create your development database.
Now we want to create our first table and interface. In Rails, this typically means we're going to create a
scaffold to start from. A scaffold is simply a starting point, and we can add increasingly complex code from there. Let's first run the scaffold command without any parameters:
$ ruby script/generate scaffold
Take a look at the output generated. It shows you how to use the command.
Now let's go ahead and use scaffold to start generating our web application. We're going to create a users table:
$ ruby script/generate scaffold user first_name:string last_name:string active:boolean
It's okay if you copy and paste this code, I won't tell anyone. So now your scaffold is created, which is just a bunch of template files.
Let's
run the migration it created for us (to create the database table).
$ rake db:migrate
-
Create a few users, and play around with your Rails interface!
We just realized that we forgot to add a bio field for a user - oops! We could either create a new migration to add that column, or roll back the migration that was created for us. Let's do the latter. To remove the table so we can add a column, run this command:
$ rake db:rollback
This will roll back one migration.
Now open the migration located in the /db/migrations/ or /db/migrate/ directory. It should be the only file.
Notice how the migration has an up method to migrate up, and down method to migrate down.
We want to add that bio field, so after the
t.boolean :active line, add:
t.text :bio
Save the file, and run
rake db:migrate again to migrate your database up:
$ rake db:migrate
If you checked your browser at this point, you'd notice that the bio field isn't automatically showing up in our user's information or forms. We will need to add this ourselves. Yes, we could have erased the files and run the scaffold command to get this field, but then you wouldn't learn anything.
Lets open up the
/app/views/users/new.html.erb file. This is what renders our New User form. We need to add a bio field using the following code below the active checkbox.
<p>
<%= f.label :bio %><br />
<%= f.text_area :bio %>
</p>
Now open up the New User page in your browser
http://localhost:3000/users/new. You should see the bio field, and be able to add new users with a bio.

For extra credit, you could use the same code if you wanted to update the
edit view (in
/app/views/users/edit.html.erb) so you can edit a user's bio.
When you create a user, you're brought automatically to his/her show page. Let's add the bio to the show page. You can do this by opening the
/app/views/users/show.html.erb file, and underneath the Active field, adding:
<p>
<b>Bio:</b>
<%=h @user.bio %>
</p>
Save the file and check it out in the browser. If you don't see your change at first, make sure you are on the show page (and not the index). When you get to this part, let out a barbaric “woot!”, you've made some great progress.
In Rails, we put our validations in our model files, so let's open /app/models/user.rb.
We want to require that a user enter their first name and last name, so let's add validation to our User model, so it ends up looking like this:
class User < ActiveRecord::Base
validates_presence_of :first_name, :last_name
end
Save the file, go to your browser, and attempt to create a user without a first name or last name.
Rails has many helper validation classes, and you can see a list on the right side
of this API page.
For extra credit, add another validation to your app just for fun.
If you viewed the browser
HTML source of your application, you may have noticed that your application is in some sort of layout. By default, when you ran the
scaffold command, a
/app/views/layouts/users.html.erb file was created, and used as your layout.
You'll probably only want to use one layout for most of your controllers, so let's give this a more generic name. Rename users.html.erb to application.html.erb. As a Rails convention, now that you have an application.html.erb file in your layouts directory, all controllers will use this by default (you can override this later if you want).
Let's add something to our layout just for fun. Open up the
application.html.erb and add something like:
<h2>Rails Rocks!</h2>
Save the file, go to your browser, and you should see the change you made reflected on ALL pages of the website.
Let's have some fun playing with our User Model. In your command prompt, type:
$ ruby script/console
You are now in a Ruby IRB session which has access to your models.
Before we start playing, run the following command so that we can see what
SQL commands are going to be generated for us.
$ ActiveRecord::Base.logger = Logger.new(STDOUT)
Let's try a simple Ruby statement to make sure everything is working:
puts "Hello Dude!"
Now let's try having some fun with our model. Create a new model by doing something like this:
u = User.new
u.first_name = "Gregg"
u.last_name = "Pollack"
u.save
Notice the SQL that is generated.
Now try doing it all in a single line:
User.create(:first_name => "Joe", :last_name => "Blow")
If you hit any errors, check for syntax problems.
Let's fetch the user with first name of Joe, and change his last name to “Johnson”.
u = User.find_by_first_name("Joe")
u.last_name = "Johnson"
u.save
Notice the SQL that gets generated; nice!
Now let's delete the user.
u.destroy
Have some fun trying the following commands to see what they do:
User.first
User.last
User.all
Feel free to set a variable with the values, and play around with changing attributes. Do note that .all returns an array, so you may want to use [0] or [2] to refer to a particular item in the array.
Let's print out all the users in your system in upper case:
User.all.each {|user| puts user.first_name.upcase }
You'll notice that it prints out the first names, and then it also returns the array of Users. Remember, every method in Ruby returns something, even if it's nil.
Let's create an array of all of the last names in our system:
User.all.map {|user| user.last_name }
What we're interested in here is the return value, which should be an array of last names.
Take a look at the
API page here. Along the right you'll see all of the methods you can run on ActiveRecord objects. Try a few.
Discussion
I got as far as 3.6, but when I try to see my application in the browser, I just get “We're sorry, but something went wrong.”
What does this mean? Where do I look to solve this?
Tim, I believe this is because you don't have the server running. As it says in 3.3, you should probably have two Terminal windows open, one to start and stop the server (ruby script/server to start, Ctrl-C to stop) and one for your other commands.
You can create production quality AJAX supported db application right away as your first application. Tested on Jaunty. http://tinyurl.com/ruby-on-rails-tutorial
I found I had to use User.find(:all) instead of User.all (and the same for the other examples). I'm using Rails 2.0.1.
After finishing part 3, I went to check /users/new and got this 404 error:
The page you were looking for doesn't exist.
You may have mistyped the address or the page may have moved.
I followed through everything and it seems fine.