即使存在未设置为true,Rails验证也需要数值

Hop*_*eam 63 ruby ruby-on-rails ruby-on-rails-3

我正在尝试保存一个没有一个字段集的记录 - 它在模型中具有验证数字.即使验证中不需要存在,它仍然会抛出该字段不是数字的错误.

验证:

validates :network_id,    :numericality => true
Run Code Online (Sandbox Code Playgroud)

代码就是保存模型:

networks.each do |network|
  network.url = network.raw_data.link
  network.save!
end
Run Code Online (Sandbox Code Playgroud)

错误:

Validation failed: Network is not a number
Run Code Online (Sandbox Code Playgroud)

Uni*_*key 124

validates :network_id, :numericality => true, :allow_nil => true
Run Code Online (Sandbox Code Playgroud)

  • @Unixmonkey 数据库中允许空值的每个字段都需要这个吗?或者有没有办法让rails自动处理这个问题(设置存在或allow_nil似乎有点痛苦) (2认同)

p.m*_*los 40

    validates :network_id, :numericality => {:allow_blank => true}
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是写它的正确方法,然后+1 (3认同)

apn*_*ing 16

你应该用 allow_blank

validates :network_id,    :numericality => true, :allow_blank => true
Run Code Online (Sandbox Code Playgroud)


ser*_*erg 11

在Rails 4(Ruby 2)中,您可以编写:

validates :network_id, numericality: { greater_than_or_equal_to: 0, allow_nil: true }
Run Code Online (Sandbox Code Playgroud)

  • 我不知道为什么这对我不起作用.我正在使用Rails 4.2.通过该验证,我可以使用nil值保存,但它也允许保存字符串. (2认同)