2013-04-05 4 views
2

У меня есть класс aluno, который имеет атрибут telefone. Я хочу ограничить один и тот же номер телефона в 3 раза. В телефоне можно только 3 телефонных номера.Rails - подсчитать атрибут перед сохранением

Прежде чем я создам новый aluno, мне нужно будет проверить, есть ли уже 3 алуноса с тем же телефоном.

Это было бы похоже на «SELECT COUNT (Telefone) FROM alunos где Telefone = '_FORM.telefone'

если количество = 3 сообщение "Max 3 telefones уже достиг"

Как бы я что?

Спасибо всем!

ответ

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 
+0

Это он мужчина! Большое спасибо! – MMeirelles

0

Вы можете сделать что-то вроде этого:

a = alunos.find_all_by_telefone(params[:telefone]) 
if a.count >= 3: 
    message = "Max reached" 
else: 
    entity.save 
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 
Смежные вопросы