在调用某个方法时验证Rails模型

时间:2013-06-20 17:12:20

标签: ruby-on-rails ruby validation activerecord

出于某种原因,我需要运行此验证

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

有没有办法删除那个标志变量?

1 个答案:

答案 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