Есть ли способ переписать процесс ниже, который в настоящее время использует find_or_initialize_by
, используя метод joins
?
Для контекста - у меня есть users
(сотрудники), которые записывают свои attendances
в системе (user
имеет много attendances
, а запись attendance
принадлежит user
).
Attendance.find_or_initialize_by(
user: User.find_by(name: 'Bob'),
date: Time.zone.today
)
.update(...) # Update some columns after this
Я пытаюсь переписать его, используя .joins
так:
Attendance.joins(:user)
.where(users: {name: 'Bob'}, date: Time.zone.today)
.first_or_initialize
.update(...) # Update some columns after this
Мои тесты возвращаются со смешанными результатами:
- Тестовые случаи, когда запись должна быть только
updated
pass
- Тестовые случаи, когда запись
attendance
еще не существует (то есть, когда мне приходится initialize
), сбой
Сообщение об ошибке
ActiveRecord::RecordInvalid: Validation failed: User must exist
.
Но я запутался, потому что пользователь действительно существует - если я отлаживаю с помощью byebug
, пользователь там.