Ruby on rails Rails 3对一组字段的验证

Ruby on rails Rails 3对一组字段的验证,ruby-on-rails,ruby-on-rails-3,mongoid,Ruby On Rails,Ruby On Rails 3,Mongoid,我有一个有一大堆字段的模型。并非所有字段都是根据用户选择的某种表单类型使用的。我有大约6种不同类型的表单,因此可以在其中4种表单上使用一个字段 是否有一种基于元素ie的分组验证方法 case xxx when "form1" validates :field1, :presence => true when "form2" validates :field1, :presence => true when "form3" validates :fi

我有一个有一大堆字段的模型。并非所有字段都是根据用户选择的某种表单类型使用的。我有大约6种不同类型的表单,因此可以在其中4种表单上使用一个字段

是否有一种基于元素ie的分组验证方法

case xxx
  when "form1"
    validates :field1, :presence => true
  when "form2"
    validates :field1, :presence => true
  when "form3"
    validates :fiel2, :presence => true
end
我将进行客户端验证,但我显然也需要服务器端来确保他们提交了良好的数据

有什么建议可以做到这一点吗

我在Mongoid 2.0中使用Rails3

提前谢谢

像这样的

validates :field1, :presence => true, :if => Proc.new { |foo| %w{form1 form2}.include?(foo.xxx) }
validates :field2, :presence => true, :if => Proc.new { |foo| %w{form1 form3}.include?(foo.xxx) }
validates :field3, :presence => true, :if => Proc.new { |foo| %w{form2 form3}.include?(foo.xxx) }

我认为模型类必须熟悉所涉及的视图,这是一个问题。如果视图中的表单名称不同,则解决方案将无法工作。您将希望使用ASP.NET中使用的“验证组”。您可以在这方面进行一些搜索,或者为Rails找到类似的解决方案,或者自行开发。也许这一条会有所帮助:

这行不通,因为foo是正在验证的。foo不知道正在处理的表单是什么?对不起,我假设xxx是模型类上的一个方法。因为不是,所以将该位更改为%w{form1 form2}。包括?(xxx)。也许真正的问题是xxx来自哪里?我以前使用过class_属性来允许将模型设置为特定模式,但不确定这是否适用于您的情况。