I’m a complete n00by on rails ATM, started learning sometime 2 days ago.
The following is not the best of tutorials but hopefully it should help
someone like myself and save them the time and trouble.
Disclaimer: I’m presuming you are on windows since that’s the
troublemaker in the bunch. I’m also presuming some prerequisites have
been met, namely: you have mysql with a root password (it’s okey to have
none, just ignore a step bellow), I’m also presuming you have ruby (and
commands such as ruby work for you). Since it’s in context I’ll also
presume you have rails 2.0.2 installed, or some other version of rails
from the (“cursed” by the user base) 2.0.x series.
– rails 1.2.6
The instructions provided (and repeated) in a few of the posts above
generally won’t work. At least for me installing rails 1.2.6 while still
holding onto 2.0.2 and it’s dependencies proved a major head ache, thing
simply won’t work to the fullest, just like the scaffold
method/generator.
To run on rails 1.2.6 and play & watch the famous blog in 15 minutes
video, do the following. (‘#’ mark comments, ignore them; they’re likely
to cause errors)
uninstall everything, like this…
gem uninstall rails
if you have multiple version a prompt will appear,
simply uninstall everything! and re-install, like so
gem install rails --version 1.2.6 --include-dependencies
You can now go through everything and have fun.
Basic round down, the dynamic scaffold thing apparently has no other use
then to generate table in which it places the fields of the database
tables (excepting :id) under the format: NameField:
int crappy tr/td tags. Note how the tag is
deprecated and is just a style thing not a semantic tag. This behavior
is reflected in the currently available static scaffold, which pretty
much makes both of them not very impressive in my eyes.
– rails 2.0.2 or perhaps later version
(blog in 15minutes equivalent tutorial)
Blog in 30s
You are root with password ‘’
rails -d mysql ruby_log
cd ruby_log
rake db:create
ruby script/generate scaffold Post title:string created_at:datetime
updated_at:datetime body:text
rake db:migrate
ruby script/server
The other stuff works as well, but really doesn’t change the semantics
much.
Customize the view to your hearts content.
has_many, has_one, belongs_to
- long version ------
Before I start detailing commands and movie parts I would just like to
point out that the movie seems to be aimed at the very beginner and some
parts (I suspect) were deliberately shown as they were so as to not make
the public feel like total strangers.
Let’s get it started.
If you don’t already installed then I “suggest” (it’s not a requirement)
you install cygwin, it will give you most of the useful linux commands,
if you wish you should be able to run the scripts as in the movie with
the ./ notation instead of calling ruby. Just a suggestion.
how I did it/ commented out line
command line
we want a mysql database, so…
rails -d mysql ruby_log
see more commands by just typing “rails”
navigate to the root of your project
cd ruby_log
extra: something I always use when programs have logs.
First, open a cygwin window, navigate down
find your project root directory
Now use tail -f on the useful logs, for example
tail -f log/development.log
now you see all the SQL as it’s made
you can change to test etc depending on your needs
Go to and open ‘config/database.yml’
Insert your password in there.
execute the following to get a few useful files up
create the database:
rake db:create
create a schema file
if it’s empty then this is the first time you used
tried to make a project with this name, if not
the command failed (showed you squat, but check the log)
you’ve just dumped the old schema (tables & table structure)
rake db:schema:dump
Tip. You generally have a corresponding ‘destroy’ method for
any create/generate method you have, for example:
> rake db:drop
> ruby script/destroy model Post
- he creates a Blog controller and shows you how to
- use render :text => “something” or View to show things
- he creates index.rhtml for the demonstration
I created a index.html.erb (.erb is the new convention for
rails files), it has to be ‘index’ btw, naming it ‘view’ etc
won’t work.
- he demonstrates the ‘scaffold :post’ method
Skip. it’s useless, unnecessary etc
- he then uses the scaffold generate directive to create a
- scaffold.
-
./script/generate scaffold Post Blog
that’s the do-thingy that just won’t work
I should note he makes note in a few places that scaffolding
is anything but rails and the misconception is widespread
I’ll continue through the commands at this point in time
// Migrations:
But first, a side note:
If you want to create a “model”, then don’t do it as he did it!
Use migrations!
Either:
ruby script/generate model User
just as a example. Go to db/migrations,
there should be only one there (insert things like this in there:
t.string :nick, :name, :type
^ this creates 3 columns (nick, name, type all of type string)
to create the database entry run
rake db:migrate
you can also create migrations by themselves
ruby script/generate migration AddSignature
go to 002_… in migrations and add something like this to .up
alter_table :users do |t|
t.text :signature
end
and to .down
drop_column :signature
Now migrate from v1 to v2
rake db:migrate
your users now have a new column: “signature”
if you migrate down, say go to v1
rake db:migrate VERSION=1
now column ‘signature’ doesn’t exist anymore
of course previous signature data has been lost also!
if you want to start with your databases empty, run
> rake db:migrate VERSION=0
if you want to wipe them out, presumably intending to
delete the project files as well, run:
> rake db:drop
we don’t want table “users” to complete the videos objective so do a:
ruby script/destroy model User
// End migration explanation
The old ‘scaffold’ entry was somewhat more flexible, it would
read the databases model of the specified table, and then
display them in the order the were in the database.
You could also modify the database and see changes live.
The new one is no longer live and you no longer specify an
existing method, instead it’s a macro for creating a:
Model, Migration (Model → Database thing), Controller & View
complete with comments and useful methods.
To create the do-post-thingy in the video write as follows:
ruby script/generate scaffold Post title:string created_at:datetime updated_at:datetime body:text
update database to latest version
rake db:migrate
start server
ruby script/server
wait for it to boot…
Go to http://localhost:3000/posts and check out this blog in 60s
(just think how fast you can copy/paste from here)
---- My newbie opinion –
I feel it’s unnecessary, I don’t hold any grudge since I’m used every
dev-thing kicking me in the balls at one point or another. It’s honestly
poor work and defect thinking. If it works and it isn’t hurting anybody,
don’t hurt the community by removing it. It’s honestly useless, a piece
of nothing, I think it’s over-praised and over-bashed, it’s not that
defective and not that important. It could have been dealt with as a
impassible error, a “won’t go production with it”, I’m sure other
elegant solutions also exist. Hiding it simply makes people want; people
who would have used it would know it’s useless.
I don’t really buy into Ron’s argument. If you are troubled inserting 20
or so fields, as key:value pairs then I, presented with this situation,
would have to consider the following: what is the significance/condition
of the fields that would result in such a large number, is it
outdated/deprecated/insignificant or simply easily generated data? can I
simplify, re-structure or back it up safely and deal with it later? Is
it end user form info?, in which case the question becomes: If I have
so much trouble inserting key:value (20 per table was it?) just what am
I asking my end users to do? (since they have to insert more complex
data)
Steven G. Harms wrote:
Hello,
I’ve read the (many) re-posts about problems around scaffolding in
Rails 2.0 and have followed a number of tutorials and fully understand
“how to scaffold” from a technical perspective, but I don’t
understand the mindset of how to use the new scaffolding. It seems
like a productivity- / agility- regress and I’m thinking I may have
failed to properly grok the new setup. In the interest of full
disclosure, I’m coming back to Rails after being in other toolkits for
about 9 months.
Thanks to the intrepid work of Sean L. at (
fairleads: Rails 2.0 and Scaffolding Step by Step
) I found a tutorial that would familiarize me with the raw “how to
scaffold” material.
I followed his tutorial’s step of:
``ruby script/generate scaffold Movie’’
Great! From that point I filled in the “columns” in the migration as I
had done in Rails 1.x. All I should need to do is run ``rake
db:migrate’’ and try adding a new record via the dynamically-created
view.
When I started the server and navigated localhost:3000/movies I had
the “create new” button. When I pushed that button there were no text
widgets to enter despite having defined the columns that corresponded
to said widgets having been added to the migration ( I have a lengthy
blog post about how my diagnostics went, for anyone else’s edification
at http://stevengharms.net/?p=1063 ). In short the scaffold that had
been created knew nothing of the columns I had added in the migration
and, as such, the ‘new’ view had no widgets.
This struck me as well, wrong. On Sean’s post another user confirms
the same experience. I have tried it with sqlite3 / mysql / postgres
connectors.
Research showed that the scaffold had remained static relative to the
time that I had done the original aenemic invocation. Per ``script/
generate scaffold --help’':
./script/generate scaffold post` # no attributes, view will be anemic
To fix this I had to re-issue the script/generate command with all the
attributes in “final draft” mode ( ``script/generate scaffold movie
title:string text:description one_sheet_url:string’’ ) and then over-
write the old templates ( output stored below, for legibility, Fig.
1).
The solution implies:
- You have to get the script/generate command’s “attributes”
arguments perfect at time of creation OR
- You do this overwriting thing that I describe below.
As I recall Rails 1.x’s dynamic scaffolding allowed us to use a
scaffold flexibly strictly based on migrations and rake db:migrate.
This flexibility allowed us to “sketch” ideas very rapidly. Or is it
considered a “Good Thing” that you get a “perfected” ``generate
scaffold’’ command at some point? If so, what’s the reasoning? Am I
missing some sort of rake command that “refreshes” the scaffold
templates?
Based on the comments at Sean’s site and some of the questions in the
comments to DHH’s Rails 2. announcement I think there are others
grappling with this quandry as well. Can anyone help?
Steven
==Fig. 1==
bash-3.2$ script/generate scaffold movie title:string text:description
one_sheet_url:string
exists app/models/
exists app/controllers/
exists app/helpers/
exists app/views/movies
exists app/views/layouts/
exists test/functional/
exists test/unit/
overwrite app/views/movies/index.html.erb? (enter “h” for help)
[Ynaqdh] y
force app/views/movies/index.html.erb
overwrite app/views/movies/show.html.erb? (enter “h” for help)
[Ynaqdh] y
force app/views/movies/show.html.erb
overwrite app/views/movies/new.html.erb? (enter “h” for help) [Ynaqdh]
y
force app/views/movies/new.html.erb
overwrite app/views/movies/edit.html.erb? (enter “h” for help)
[Ynaqdh] y
force app/views/movies/edit.html.erb
identical app/views/layouts/movies.html.erb
identical public/stylesheets/scaffold.css
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
identical app/models/movie.rb
identical test/unit/movie_test.rb
skip test/fixtures/movies.yml
exists db/migrate
Another migration is already named create_movies: db/migrate/
001_create_movies.rb