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