2

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

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

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

4

1 回答 1

1

我认为这里没有任何必要性。

如果您发布帖子,则帖子 obj 必须是persistent。所以publish方法必须调用create/save方法里面。

如果调用了此类方法,则验证规则也将被调用。

添加

验证也适用于更新

创建和保存新记录将向数据库发送 SQL INSERT 操作。更新现有记录将改为发送 SQL UPDATE 操作。验证通常在这些命令发送到数据库之前运行。如果任何验证失败,对象将被标记为无效,Active Record 将不会执行 INSERT 或 UPDATE 操作。

http://guides.rubyonrails.org/active_record_validations_callbacks.html#when-does-validation-happen

于 2013-06-20T17:19:06.667 回答