How do I force a rails ActiveRecord string column to only accept strings? -


i have post class title:string field

post = post.create! #=> post created post.title = "foo" post.save!  # success post.title = 1 post.save!  # succeeds, want throw type mismatch exception 

how last save! throw type mismatch?

ruby duck-typed language , doesn't have type mismatches. if object responds to_s, rails call to_s on , put string field.

it sounds want validate format of value you're putting field (is string "2" valid value?), validates_format_of for. example, if want ensure value has @ least 1 non-digit character, this:

class post < activerecord::base   validates_format_of :title, with: /\d/ end 

of course, may want customize regex bit more.

if can't stand duck-typing , want make sure nothing true string goes column, can override title=:

class post < activerecord::base   def title=(value)     throw "`title' must string" unless value.is_a?(string)     super   end end 

note won't invoked when e.g. post[:title] = ... or post.write_attribute(:title, ...) should cover 95% of situations.


Comments

Popular posts from this blog

Android : Making Listview full screen -

javascript - Parse JSON from the body of the POST -

javascript - How to Hide Date Menu from Datepicker in yii2 -