0

我正在尝试使用rails保存一个表单,它是一个简单的表单,每次我尝试发送一个带空格的名称(如john smith)时,我实际上并没有收到错误,它返回成功,但不保存任何东西,当我尝试 johnsmith 然后它的工作原理。

我检查了我的模型,我有这个

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

仅验证字母,但接受空格,当我尝试时,仍然没有成功。

在我的控制器上,我有这样的东西。

name = params[:name].to_s

然后

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

最后我只做了一个@user.save

知道如何避免这个问题吗?我确实想接受名称上的空格,但不会遇到安全问题。

谢谢

在我的控制台中发布的结果

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"=>"newuser@gmail.com", "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)
4

2 回答 2

3

你的正则表达式是错误的。您只接受字母,空格不是字母。尝试这样的事情:\A[a-zA-Z,\s]+\z

BTW rubular 是一个非常酷的工具,如果你需要测试你的正则表达式。

http://rubular.com/

于 2013-05-21T22:05:43.210 回答
1

关于未显示验证消息:

如果您正在执行异步请求,则需要在客户端进行验证。有一些 gem 可以帮助您解决这个问题,例如客户端验证 gem

此外,如果您使用 jQuery.ajax(),您可以使用其回调在调用后执行操作(通知用户成功或对 DOM 执行任何您想要的操作):

$.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 
});

如果您需要调试这样的事情,请尝试pry。只需添加到您的 gemfile:

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

运行捆绑安装,重新启动服务器,然后您可以添加:

binding.pry

无论您想在哪里停止代码执行并在控制台中检查应用程序环境的当前状态。

在您的情况下,它将位于 UsersController#custom 方法的末尾。然后,您可以检查您的终端值@user。方法@user.valid?,并@user.errors会告诉您您的 @user 对象是否有效,并向您显示一个包含与该对象关联的所有验证错误的数组。

于 2013-05-21T23:52:43.587 回答