Rails - 保存前的Count属性

时间:2013-04-05 04:07:22

标签: ruby-on-rails count

我有一个aluno类,它有:telefone属性。我想限制3次相同的电话号码。只需3个电话号码即可:telefone column。

在我创建一个新的aluno之前,我必须检查是否已经有3个具有相同电话的alunos。

这就像是一个“SELECT count(telefone)FROM alunos,其中telefone ='_FORM.telefone'

如果count = 3 消息“已达到最多3个电话”

我该怎么做?

全部谢谢!

3 个答案:

答案 0 :(得分:2)

是的,您需要在模型中创建自定义验证器。它看起来像下面。

class Aluno < ActiveRecord::Base
  ...

  validate :there_are_three_max_telefone

  def there_are_three_max_telefone
    alunos = Aluno.find_all_by_telefone(telefone)
    if alunos.count >= 3
      errors[:base] << "Max 3 telefones already reached"
    end
  end
end

答案 1 :(得分:0)

您可以这样做:

a = alunos.find_all_by_telefone(params[:telefone])
if a.count >= 3:
   message = "Max reached"
else:
   entity.save

答案 2 :(得分:0)

我会使用自定义方法进行此验证。这样的东西应该进入你的Aluno模型。

validate :telefone_count

def telefone_count
  tele_count = Aluno.where(telefone: telefone).count
  if tele_count >= 3
    errors.add(:telefone, "Already 3 or more with the same telefone.")
  end
end