Пользовательская проверка для uniq_workers проблемы с массивом - PullRequest
0 голосов
/ 21 января 2019

У меня есть пользовательская проверка.Что я должен переписать.Я хочу проверить уникальность работников в текущий день.

Вот мой код:

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 в комментарии это то, что возвращает отладчик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...