Rails模型验证在不同的上下文中

时间:2014-01-26 10:53:00

标签: ruby-on-rails validation ruby-on-rails-4

假设您有一个在没有价格的情况下创建的产品模型。 但是不允许在没有价格的情况下出现在网站上。

也许不是最好的例子,只是随便一起去。

您将如何在不同的环境中实施模型验证? 除了条件验证之外的其他解决方案,因为模型不需要额外的字段。

1 个答案:

答案 0 :(得分:1)

验证是一种防止创建/保存无效字段的工具。对于显示,它是一个过滤器,用于防止显示有效实体。您可以使用条件验证,但这不会影响显示,只能保存。

您可以为要显示的项目设置范围或过滤方法。 E.g。

scope :visible, where('price is not NULL')

或者如果条件过于复杂(比如检查更多的字段),如果记录准备好显示,你应该引入一个新的(可能是旗形的)字段来存储。保存模型时可以更改它。

before_save :update_ready_to_display
def update_ready_to_display
  ... # checking code here
end
scope :visible, where(ready_to_display: true)

如果条件是动态的(例如取决于当前日期,对于时间有限的项目),或者非常复杂(例如需要依赖图,如果所有子项都有效则项目有效等等)你要么去第一个缓慢的解决方案,或尝试定时任务重新计算单个项目的可见性。