Migrate seems to work but doesn't

I’d be very grateful for some help. I am a newbie working through Agile
Web D. with Rails 2nd edition.

As far as I know I have all the compatible versions of things installed
including RadRails 0.7.2. I have got up to page 81 and everything works
correctly.

I am now trying migrate/003_add_test_data.rb and have copied the code
from the website. When I do the migrate it appears to complete OK, but
when I inspect the DB, the table is empty. This is very worrying.

  1. Shouldn’t the migrate give an error message if it failed?
  2. Why is it not working?

Here is the code:

class AddTestData < ActiveRecord::Migration
def self.up
Product.delete_all

Product.create(:title => 'Pragmatic Project Automation',
:description =>
%{<p>
   <em>Pragmatic Project Automation</em> shows you how to improve

the
consistency and repeatability of your project’s procedures using
automation to reduce risk and errors.



Simply put, we’re going to put this thing called a computer to
work
for you doing the mundane (but important) project stuff. That
means
you’ll have more time and energy to do the really
exciting—and difficult—stuff, like writing quality code.

},
:image_url => ‘/images/auto.jpg’,
:price => 29.95)
Product.create(:title => 'Pragmatic Version Control',
:description =>
  %{<p>
     This book is a recipe-based approach to using Subversion that

will
get you up and running quickly—and correctly. All projects
need
version control: it’s a foundational piece of any project’s
infrastructure. Yet half of all project teams in the U.S. don’t
use
any version control at all. Many others don’t use it well, and
end
up experiencing time-consuming problems.

},
:image_url => ‘/images/svn.jpg’,
:price => 28.50)
# . . .
Product.create(:title => 'Pragmatic Unit Testing (C#)',
:description =>
%{<p>
    Pragmatic programmers use feedback to drive their development

and
personal processes. The most valuable feedback you can get while
coding comes from unit testing.



Without good tests in place, coding can become a frustrating
game of
“whack-a-mole.” That’s the carnival game where the player
strikes at a
mechanical mole; it retreats and another mole pops up on the
opposite side
of the field. The moles pop up and down so fast that you end up
flailing
your mallet helplessly as the moles continue to pop up where you
least
expect them.

},
:image_url => ‘/images/utc.jpg’,
:price => 27.75)

end

def self.down
Product.delete_all
end
end

On 15 Aug 2008, at 15:38, Mitch Landor wrote:

I am now trying migrate/003_add_test_data.rb and have copied the code
from the website. When I do the migrate it appears to complete OK, but
when I inspect the DB, the table is empty. This is very worrying.

  1. Shouldn’t the migrate give an error message if it failed?
  2. Why is it not working?

Failing validation ? Product.create! will tell you when a create fails

Fred

On 15 Aug 2008, at 17:12, Mitch Landor wrote:

During manual data entry the validations obviously highlight the
errors.
But during a migrate there doesn’t seem to be any message that the
coded
inserts failed. If I were not intimately familiar with the code, how
would I know that it had failed? (Of course I could inspect the DB
but I
shouldn’t need to do that and it would require me to know what to look
for). Am I missing something here?

The created object object would still have new_record set etc…
If you’re going to use the version of save/create that doesn’t raise
an exception on failure it’s up to you to check that everything has
gone ok.

Fred

Failing validation ? Product.create! will tell you when a create fails

Thanks Fred.

I switched off my validations, the migration worked correctly and I have
discovered and corrected the error.

During manual data entry the validations obviously highlight the errors.
But during a migrate there doesn’t seem to be any message that the coded
inserts failed. If I were not intimately familiar with the code, how
would I know that it had failed? (Of course I could inspect the DB but I
shouldn’t need to do that and it would require me to know what to look
for). Am I missing something here?

Frederick C. wrote:

If you’re going to use the version of save/create that doesn’t raise
an exception on failure it’s up to you to check that everything has
gone ok.

What version of save/create does raise an exception on failure?

Frederick C. wrote:

On 15 Aug 2008, at 22:32, Mitch Landor wrote:

Frederick C. wrote:

If you’re going to use the version of save/create that doesn’t raise
an exception on failure it’s up to you to check that everything has
gone ok.

What version of save/create does raise an exception on failure?

save!, create!

Fred

Shouldn’t we always use the version of save/create that does raise an
exception on failure? In what circumstances wouldn’t we use this?

On 15 Aug 2008, at 22:32, Mitch Landor wrote:

Frederick C. wrote:

If you’re going to use the version of save/create that doesn’t raise
an exception on failure it’s up to you to check that everything has
gone ok.

What version of save/create does raise an exception on failure?

save!, create!

Fred

On 16 Aug 2008, at 15:56, Mitch Landor wrote:

gone ok.

What version of save/create does raise an exception on failure?

save!, create!

Fred

Shouldn’t we always use the version of save/create that does raise an
exception on failure? In what circumstances wouldn’t we use this?

nothing wrong with

if @thing.save
#ok
else
oops
end

You could of course write that with save! and a rescue clause, but I’d
rather keep exceptions for exceptional things, whereas for example a
user entering bad data isn’t.
But I’d never use the non ! version of the create/update methods
without checking for success in one way or another.

Fred