出于某种原因,我需要运行此验证
validates_presence_of :user_id
只是在调用某个方法时
def publish # this method does not save nor update record
# so validations are not run
...
end
我已经这样解决了:
# model
validates_presence_of :user_id, if: :going_to_publish
attr_accessor :going_to_publish
# when calling publish
post.going_to_publish = true
post.publish
有没有办法删除那个标志变量?
答案 0 :(得分:1)
我认为这里没有必要。
如果发布帖子,帖子obj必须持久。因此,publish
方法必须在内部调用create
/ save
方法。
如果调用此类方法,也会调用验证规则。
添加
验证也适用于更新
创建和保存新记录将向数据库发送SQL INSERT操作。更新现有记录将改为发送SQL UPDATE操作。通常在将这些命令发送到数据库之前运行验证。如果任何验证失败,该对象将被标记为无效,Active Record将不会执行INSERT或UPDATE操作。
http://guides.rubyonrails.org/active_record_validations_callbacks.html#when-does-validation-happen