У меня есть пользовательская проверка.Что я должен переписать.Я хочу проверить уникальность работников в текущий день.
Вот мой код:
crew_worker.rb
class CrewWorker < ApplicationRecord
belongs_to :crew
belongs_to :worker
validate :uniq_worker_in_scope_of_day, if: -> obj { obj.new_record? && obj.crew.present? && obj.worker.present? }, on: :create
private
def uniq_worker_in_scope_of_day
assignment = crew.assignment #Assignment entity
crews_leader_ids = assignment.crews.map(&:leader_id) #[1,1]
active_worker_ids = assignment.worker_ids #[9,1]
workers = active_worker_ids - crews_leader_ids [9]
if workers.include?(worker.id) # workers = [9], worker.id = 1
errors.add(:base, 'has been already assigned at current day')
end
end
end
crew.rb
class Crew < ApplicationRecord
belongs_to :assignment, inverse_of: :crews
end
assignment.rb
class Assignment < ApplicationRecord
belongs_to :company
has_many :crews, ->{ order(created_at: :asc) }, dependent: :destroy, inverse_of: :assignment
has_many :crew_workers, through: :crews, dependent: :destroy
has_many :workers, through: :crew_workers
has_many :assignment_items, through: :crews, dependent: :destroy
end
, но эта проверка работает 2 раза.и на следующих кругах возвращается:
#first_lap:
workers = [9]
worker.id = 1
#second_lap:
workers = [9]
worker.id = 9
Почему на втором круге возвращаются 9 и 9, а не 9 и 1. PS в комментарии это то, что возвращает отладчик.