У меня есть две модели ...# Активные проверки записей:: Как проверить атрибуты даты в Rails (custom_validations)?
модели/Resident.rb: has_many: листья
модели/leave.rb: BELONGS_TO: резидентный
Теперь я хотите проверить атрибуты модели отпуска до их создания.
leave.rb атрибуты: дата_начала END_DATE, назначения
вот мой отпуск модель:
class Leave < ActiveRecord::Base
belongs_to :resident
validates :destination,presence:true
validates :end_date,presence: true
validates :start_date,presence: true
before_create :check_correct_leave
private
def check_correct_leave
if resident.hostel.hostel=='J'
(self.end_date - self.start_date).to_i == 4 || (self.end_date - self.start_date).to_i == 5
else
errors.add(:start_date, "Leave are granted only 4 or 5 days")
end
end
end
Я хочу check_correct_leave метод также проверить -> если резидент уже имеет отпуск (хранится в модели отпуска) этого месяца (месяц означает jan, feb и т. д.), тогда он должен сгенерировать ошибку, которая:
«Вы не можете отметить отпуск, потому что вы уже отметили разрешение на этот месяц» и модель не должна хранить этот отпуск. Спасибо!
он работает, но Im получает ошибку вспышки от моего контроллера: определения функции создания @ отпуск = current_user.resident.leaves.create (leave_params) если @ leave.save вспышки [: Информация] = «Оставить успешно отмеченным» redirect_to leaves_path еще flash [: danger] = "Отметьте свой отпуск снова (не покидайте Vaild)!" redirect_to new_leave_path конец end' ** вспышка [: опасность] = "! Марк Ваш Отпуска Again (Не непросроченный Leave)" ** это одна ошибка .. –
если вы хотите показать добавил сообщение об ошибке, вы можете изменить флэш [: опасность] на 'flash [: danger] = @ leave.errors.full_messages.first' –
Да, это работает, но когда я создаю отпуск, он показывает мне ошибку -> ** Вы можете ' t mark leave, потому что вы уже отметили отпуск в этом месяце ** , но отпуск сохраняется в базе данных !! как это исправить? –