Migrate seems to work but doesn't

I'd be very grateful for some help. I am a newbie working through Agile
Web Development 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.
      </p>
      <p>
        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.
      </p>},
    :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.
      </p>},
    :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.
      </p>
      <p>
        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.
      </p>},
    :image_url => '/images/utc.jpg',
    :price => 27.75)

  end

  def self.down
    Product.delete_all
  end
end

I'd be very grateful for some help. I am a newbie working through Agile
Web Development 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?

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

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?

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

Frederick Cheung 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

Frederick Cheung wrote:

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