0

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

有没有人这样做过?

4

1 回答 1

0

弄清楚了。如果其他人遇到此问题,请参阅以下解决方案:

with_options if: -> {[:started, :completed].include?(validation_context)} do |v|
  v.validates_with_method :has_data, method: :check_data_started?
end
于 2013-04-10T07:42:08.437 回答