在ActiveRecord中使用with_options和一个数组进行上下文验证



最近从Datamapper转移到ActiveRecord,我们正在使用的一个很酷的功能是上下文验证和使用with_options,它可以传递一个数组,如下所示:

with_options when: [:started, :completed] do |v|
  v.validates_with_method :has_data, method: :check_data_started?
end

如果.valid?(:started).valid?(:completed)被调用,将触发块内的所有验证。

是否有办法做到这与活动记录,我试过:

with_options on: [:started, :completed] do |v|
  v.validate :check_data_started?
end

这看起来爆炸与一个错误,说我不能传递一个数组在我的with_options调用,因为它只期望一个上下文:

/home/vagrant/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:414: syntax error, unexpected '[', expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END ...ue && (validation_context == :[:started, :complet...

以前有人这样做过吗?

明白了。如果有人遇到这个问题,请参考下面的解决方案:

with_options if: -> {[:started, :completed].include?(validation_context)} do |v|
  v.validates_with_method :has_data, method: :check_data_started?
end

最新更新