最近从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