让我们说有一个像这样的帖子模型:
class Post < ActiveRecord::Base
.......
.......
end
它有两个属性:title 和:body 。
现在,Post对象可以经历多个阶段:&#39; draft&#39; - &gt;的&#39;发表&#39;
现在,在草稿模式中保存帖子时,:title 并非必需。但是在以发布模式保存它时,它需要在标题上进行状态验证:
validates_presence_of :title
现在,在Rails中执行此操作的最佳方法是什么?我认为装饰器模式的一些实现会很棒,其中在控制器中,我会动态地将验证添加到活动记录对象。
这是我遇到的更大问题的简化版本。在实际情况中,还有更多验证,包括在关联对象上完成的验证。
答案 0 :(得分:0)
如果您使用state_machine进行状态转换,它会支持您正在寻找的内容,并在自述文件中提供示例。
否则,所有rails验证都有可选的if
参数。例如,如果您的帖子使用published?
方法返回是否处于已发布状态,则可以编写validates_presence_of :title, if: :published?
并让它完全按照您的需要进行操作。