如何创建一个验证,检查多个布尔值中是否至少有一个是真的?

时间:2012-10-28 00:03:00

标签: ruby-on-rails ruby validation model

我有一个管理任务的Rails 3.2应用程序。此处正在为用户分配任务。任务模型具有多个用户变量,即布尔值。如何添加验证以表明至少有一个用户设置为true?

原件:

class Task < ActiveRecord::Base
  attr_accessible :title, :user1, :user2, :user3, :user4:
  validates :title, :presence => true
  validates :is_assigned


  def is_assigned
    if #AT_LEAST_ONE_USER_IS_TRUE
      errors.add("The task must be assigned to at least one user.")
    end
  end

end

编辑:

class Task < ActiveRecord::Base
  attr_accessible :title, :user1, :user2, user3, :user4

  validates :title, :presence => true
  validate :is_assigned

  def is_assigned
    unless @user1 || @user2 || @user3 || @user4
      errors.add(:user1, "The task must be assigned to at least one user.")
    end
  end

end

我越来越接近了,但这不起作用。错误似乎总是出现。

看起来像errors.add需要另一个变量。如何为所有用户而不仅仅是user1提供?

2 个答案:

答案 0 :(得分:1)

检查至少有一个用户是否为真:

if @user1 || @user2 || @user3 || @user4

答案 1 :(得分:0)

这最终成为我的最终解决方案:

class Task < ActiveRecord::Base
  attr_accessible :title, :user1, :user2, user3, :user4

  validates :title, :presence => true
  validate :is_assigned

  def is_assigned
    unless user1 || user2 || user3 || user4
      errors[:base] << "The task must be assigned to at least one user."
    end
  end

end