Как предотвратить создание повторяющейся строки в Rails? - PullRequest
1 голос
/ 05 августа 2020
Модель

project_site имеет такие атрибуты, как site_id, project_id и attendance_month.

Перед сохранением данных в таблице я хочу проверить, существует ли такая же строка, а затем добавить ошибку.

Если такая же строка не существует, я хочу добавить строку в таблицу. Я попробовал проверить метод при создании, но это не сработало.

Текущий код в модели:

project_site.rb

validates :attendance_month, :project_id, :site_id, presence: true
belongs_to :user

1 Ответ

2 голосов
/ 05 августа 2020

Если я правильно понимаю вопрос, вам нужна только одна запись в БД для комбинации записей :attendance_month, :project_id и :site_id?

Я бы сделал это

Добавьте настраиваемую проверку в модель

validate :validate_record_is_unique

Затем для самого метода (вы можете изменить сообщение на любое очевидное)

def validate_record_is_unique
  # Check if a matching record exists
  rec = ProjectSite.where('attendance_month = ? AND project_id = ? AND site_id = ?', self.attendance_month, self.project_id, self.site_id)

  if rec.count > 0
    errors.add :attendance_month, 'A record for this site and project already exist for that month.'
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...