Error in Tutorial #1 in beta book

Page 87.

Suggested validation parameter of:

validates_numericality_of :price, :only_integer => true

conflicts with the migration add_test_data obj.create method setting :price => 28.56

No error is produced in log/development.log that indicates why the test data is not being entered btw.

Accurate error output would have vastly decreased the time it took me to locate this problem as a rails/ruby newbie.

krunk wrote:

Page 87.

Suggested validation parameter of:

validates_numericality_of :price, :only_integer => true

conflicts with the migration add_test_data obj.create method setting :price => 28.56

You might need to update your beta book, because I can't find any reference to :only_integer on that page. I'm looking at version B1.16.

No error is produced in log/development.log that indicates why the test data is not being entered btw.

Accurate error output would have vastly decreased the time it took me to locate this problem as a rails/ruby newbie.

Ah, but think how much you've learned in figuring out this problem by yourself!

Seriously, though, validation failures aren't reported as errors in the log because they aren't errors. It's a part of the normal application flow: someone fills out a form incorrectly, the validation fails, and you redisplay the form. For this reason, the common methods (.save, .create) don't raise an exception if the record could not be saved due to validation failures.

If it makes sense in your application, you can use the alternative forms .save! and .create!, which *will* raise an exception if the saving fails.

So in this migration, yes, it might have been better to write the Product.create() lines so that an exception is raised if the creation of the test data failed. That way you would have been alerted to the problem. But I don't think it's a fundamental problem with Rails.

Chris

I don't believe the book says that: the price field has been a decimal for a long time time (only the first couple of versions of the beta book had an integer price--after that the core team introduced support for decimal types and I changed the example to use them).

I suggest you regenerate your PDF to get the latest description (I'd have done this for you, but I can't find an order under your e-mail address).

Regards

Dave Thomas