如何验证保存的记录而不更改ActiveRecord?

时间:2017-10-23 05:52:57

标签: ruby-on-rails validation activerecord ruby-on-rails-5

我的Rails5.1.4项目有了Station模型,还有一些已保存的记录。

class Station < ApplicationRecord
end

> Station.first
# => #<Station:0x0055f5ca447d78 id: 1, name: nil>

然后我添加了新的验证(存在检查名称)。

class Station < ApplicationRecord
  with_options on: [:publishing] do
    # added new validation
    validates :name, presence: true
  end
end

在这里,如果验证!调用的方法没有属性更改。验证!方法返回true。

> reload!
> station = Station.first
# => #<Station:0x0055f5cf4b6228 id: 1, name: nil>
> station.validate!(context: :publishing) # without attributes changing
# => true
# expected ActiveRecord::RecordInvalid raising.

这对我来说是个问题。

我希望ActiveRecord引发ActiveRecord::RecordInvalid,因为我为名称添加了状态验证。

我可以这样做吗?

此致

2 个答案:

答案 0 :(得分:4)

错误的论点。试着像这样称呼它:

station.validate!(:publishing)

文档:https://apidock.com/rails/v4.2.7/ActiveRecord/Validations/validate%21

答案 1 :(得分:2)

尝试使用有效?

station = Station.first
station.valid?

应该可以正常工作:)

注意: 其他答案建议使用验证两者都应该可以正常工作,因为验证有效?的别名。查看this