# Migrate seems to work but doesn't

**URL:** <https://www.ruby-forum.com/t/migrate-seems-to-work-but-doesnt/145968>\
**Category:** Rails\
**Created:** [August 15, 2008, 4:38pm UTC](https://www.ruby-forum.com/t/migrate-seems-to-work-but-doesnt/145968 "2008-08-15T16:38:14Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![khamaj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/4da419/32.png) [@khamaj](https://www.ruby-forum.com/u/khamaj)\
**Post date:** [August 15, 2008, 4:38pm UTC](https://www.ruby-forum.com/t/migrate-seems-to-work-but-doesnt/145968/1 "2008-08-15T16:38:14Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![khamaj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/4da419/32.png) [@khamaj](https://www.ruby-forum.com/u/khamaj)\
**Post date:** [August 15, 2008, 4:52pm UTC](https://www.ruby-forum.com/t/migrate-seems-to-work-but-doesnt/145968/2 "2008-08-15T16:52:39Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![khamaj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/4da419/32.png) [@khamaj](https://www.ruby-forum.com/u/khamaj)\
**Post date:** [August 15, 2008, 6:17pm UTC](https://www.ruby-forum.com/t/migrate-seems-to-work-but-doesnt/145968/3 "2008-08-15T18:17:05Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![khamaj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/4da419/32.png) [@khamaj](https://www.ruby-forum.com/u/khamaj)\
**Post date:** [August 15, 2008, 6:12pm UTC](https://www.ruby-forum.com/t/migrate-seems-to-work-but-doesnt/145968/4 "2008-08-15T18:12:14Z")

</div>

> 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?

---

<div class="post-metadata">

**Author:** ![khamaj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/4da419/32.png) [@khamaj](https://www.ruby-forum.com/u/khamaj)\
**Post date:** [August 15, 2008, 11:32pm UTC](https://www.ruby-forum.com/t/migrate-seems-to-work-but-doesnt/145968/5 "2008-08-15T23:32:06Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![khamaj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/4da419/32.png) [@khamaj](https://www.ruby-forum.com/u/khamaj)\
**Post date:** [August 16, 2008, 4:56pm UTC](https://www.ruby-forum.com/t/migrate-seems-to-work-but-doesnt/145968/6 "2008-08-16T16:56:05Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![khamaj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/4da419/32.png) [@khamaj](https://www.ruby-forum.com/u/khamaj)\
**Post date:** [August 15, 2008, 11:37pm UTC](https://www.ruby-forum.com/t/migrate-seems-to-work-but-doesnt/145968/7 "2008-08-15T23:37:34Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![khamaj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/4da419/32.png) [@khamaj](https://www.ruby-forum.com/u/khamaj)\
**Post date:** [August 16, 2008, 6:48pm UTC](https://www.ruby-forum.com/t/migrate-seems-to-work-but-doesnt/145968/8 "2008-08-16T18:48:29Z")

</div>

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
