最近从 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)
调用,它将触发块内的所有验证。
有没有办法用 Active Record 做到这一点,我试过:
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...
有没有人这样做过?