Ruby on rails 3 使用with_选项和数组在ActiveRecord中进行上下文验证

Ruby on rails 3 使用with_选项和数组在ActiveRecord中进行上下文验证,ruby-on-rails-3,activerecord,Ruby On Rails 3,Activerecord,最近从Datamapper转到ActiveRecord,我们使用的一个很酷的功能是上下文验证,并使用with_选项传递数组,如下所示: with_options when: [:started, :completed] do |v| v.validates_with_method :has_data, method: :check_data_started? end 如果调用了.valid?(:start)或.valid?(:completed),则会触发块内的所有验证 有没有办法用Act

最近从Datamapper转到ActiveRecord,我们使用的一个很酷的功能是上下文验证,并使用with_选项传递数组,如下所示:

with_options when: [:started, :completed] do |v|
  v.validates_with_method :has_data, method: :check_data_started?
end
如果调用了
.valid?(:start)
.valid?(:completed)
,则会触发块内的所有验证

有没有办法用Active Record做到这一点,我尝试过:

with_options on: [:started, :completed] do |v|
  v.validate :check_data_started?
end
这看起来像是说我不能在with_选项调用中传递数组,因为它只需要一个上下文:

/home/vagrant/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active\u support/callbacks.rb:414:语法错误,意外“[”,应为tSTRING\u内容或tSTRING\u DBEG或tSTRING\u DVAR或tSTRING\u END
…ue&&(验证上下文==:[:开始,:完成…


以前有人这样做过吗?

解决了这个问题。如果其他人遇到这个问题,请参阅下面的解决方案:

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

有没有办法将lambda中的那些条件重构成一个方法并调用它?我把我的方法放在那里,但它只是忽略了它