jpganz18
jpganz18

Reputation: 5858

why I can not accept white spaces on field for save in ruby on rails?

I am trying to save a form with rails, its a simple one, and everytime I try to send a name with a space (like john smith) I dont actually get an error, it returns succcess, but does not save anything, when I try johnsmith then it works.

I checked on my model and I have this

  validates :first_name, :allow_blank => true, :format => { :with => /\A[a-zA-Z]+\z/, :message => "Only letters allowed" }

validating only letters, but accepting spaces, still, when I try, no success.

At my controller I have something like this.

name = params[:name].to_s

and later

@user.atributes = { :weight => weight, :name => name ... and so on

at the end I only make a @user.save

Any idea how to avoid this problem? I do want to accept spaces on the names, but without getting into security problems.

Thanks

result of the post in my console

Started POST "/users/custom" for 192.168.1.21 at 2013-05-21 17:51:06 -0600
Processing by UsersController#custom as JS
  Parameters: {"name"=>"  new user", "lastname"=>" my last name", "mail"=>"[email protected]", "sex"=>"0" ... n so on}
  User Load (0.1ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 6 LIMIT 1
   (0.1ms)  BEGIN
   (0.3ms)  UPDATE `users` SET `first_name` = ' new user', `ssn` = 0, `updated_at` = '2013-05-21 23:51:06' WHERE `users`.`id` = 6
   (1.2ms)  COMMIT
  Rendered users/custom.html.erb within layouts/application (0.1ms)
Completed 200 OK in 16ms (Views: 11.0ms | ActiveRecord: 1.7ms)

Upvotes: 0

Views: 358

Answers (2)

Marek Takac
Marek Takac

Reputation: 3048

Your regex is wrong. You're accepting only letters, whitespace is not a letter. Try something like this: \A[a-zA-Z,\s]+\z

BTW rubular is pretty cool tool, if you need to test your regexps.

http://rubular.com/

Upvotes: 3

Marek Takac
Marek Takac

Reputation: 3048

About the validation message not showing up:

If you're doing asynchronous request, you'll need to make your validation on the client side. There are some gems which can help you with this, e.g. client side validations gem.

Also, if you're using jQuery.ajax() you can use its callback to perform an action after the call (notify user of success or do whatever with DOM you want to):

$.ajax({
    url: "http://some/url.com",
    // rest of your ajax call
}).done(function (data) {
    console.log("Your data:", data); // this will be run after the async. call 
});

If you need to debug things like this try pry. Just add to your gemfile:

group :test, :development do  
  gem 'pry', '~> 0.9.12'
end

Run bundle install, restart server and then you can add:

binding.pry

wherever you want to stop code execution and inspect current state of your app enviroment in the console.

In your case it would be somewhere at the end of UsersController#custom method. You can then check in your terminal value of @user. Methods @user.valid? and @user.errors will tell you if your @user object is valid and show you an array with all validation errors associated with the object.

Upvotes: 1

Related Questions