Validating input values(integer)

Rails 3.1.3

I have a table ‘Contribution’ having a column, ‘price’ which must be
integers.

validate :price => true, :numericality => { :only_intger => true }

then, in creating a new Contribution DB, I need to check the user input
values. Of course, if the values are not valid, it needs to stay in the
same page showing error messages .

in ‘contributions_controller.rb’,

respond_to do |format|
  if @contribution.save
    format.html { render action: "new", notice: 'Contribution was

successfully created.’ }
format.json { render json: @contribution, status: :created,
location: @contribution }
else
format.html { render action: “index” }
format.json { render json: @contribution.errors, status:
:unprocessable_entity }
end
end

hoping that the ‘save’ method FAILS upon inputing string values, for
example.

But interestingly, if I input, say, ‘this’ in the input form, it directs
to the next page and the ‘0’ (an integer, though) value is inserted in
the DB. I do not have any default value to ‘price’.

Could anyone point out any mistakes that I am making here?

Thanks in advance.

soichi

On 4 May 2012 08:16, Soichi I. [email protected] wrote:

But interestingly, if I input, say, ‘this’ in the input form, it directs
to the next page and the ‘0’ (an integer, though) value is inserted in
the DB. I do not have any default value to ‘price’.

If you pop open a Rails console and type:

‘this’.to_i

What result do you get?

Yep - zero is an integer. Rails casts the values from params to map to
the DB fields, so if you want validate the values the user typed
rather than the values Rails has translated them to, you may need to
write a custom validation and check the “before_typecast” value.

Thanks for your reply.

If you pop open a Rails console and type:

‘this’.to_i

What result do you get?

1.9.3-p0 :008 > ‘this’.to_i
=> 0
1.9.3-p0 :009 >

It’s zero…it does not seem good at all :wink:

soichi

On 4 May 2012 09:41, Soichi I. [email protected] wrote:

1.9.3-p0 :008 > ‘this’.to_i
=> 0
1.9.3-p0 :009 >

It’s zero…it does not seem good at all :wink:

That’s a different thread entirely :wink:

Hi All

I am a newbie to this community.

I recently published a gem called event_watcher for one of my project

It is a simple dsl thing that is designed to help monitor certain
function calls

I wonder if I can get some feedback or advise in general

Thanks

On Friday, 4 May 2012 03:16:32 UTC-4, Ruby-Forum.com User wrote:

Rails 3.1.3

I have a table ‘Contribution’ having a column, ‘price’ which must be
integers.

validate :price => true, :numericality => { :only_intger => true }

I’m not sure what effect this syntax will actually have, but it’s not
the
one you’re looking for. The line in your model should look like this

validates :price, :numericality => { :only_integer => true }

(note the plural ‘validates’ rather than ‘validate’ - they do two quite
different things!)

–Matt J.

validates :price, :numericality => { :only_integer => true }

(note the plural ‘validates’ rather than ‘validate’ - they do two quite
different things!)

I must be blind! It should have been

validates :price, :presence => true, …

and plural, yes, it reminds me Rails like plural nouns.

Thanks.

soichi