我的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
,因为我为名称添加了状态验证。
此致
答案 0 :(得分:4)
错误的论点。试着像这样称呼它:
station.validate!(:publishing)
文档:https://apidock.com/rails/v4.2.7/ActiveRecord/Validations/validate%21
答案 1 :(得分:2)
尝试使用有效?
station = Station.first
station.valid?
应该可以正常工作:)
注意:强> 其他答案建议使用验证两者都应该可以正常工作,因为验证是有效?的别名。查看this