Вам не нужно переносить значения, чтобы исключить их из лямбды, они будут работать как есть, если вы передадите только результат запроса Blacklist AR.
validates_exclusion_of :nickname,
in: Blacklist.select(:name).map(&:name).uniq.to_s,
message: 'This nickname is not allowed'
Обратите внимание, вы можете использовать ActiveRecord :: Calculations # pluck , чтобы получить только имена из черного списка, избавиться от комбинации выбора и сопоставления и использовать ActiveRecord :: QueryMethod # Different , чтобы получить неповторяющиеся значения.
При этом вам не нужны шаги uniq
и to_s
.Последний, потому что проверка ожидает перечисляемый объект, и вы будете передавать строку.
Что-то вроде:
validates_exclusion_of :nickname,
in: Blacklist.distinct.pluck(:name),
message: 'This nickname is not allowed'
where
, который вы используете напроверка не будет работать, так как она применяет инструкцию WHERE без передачи имени столбца для проверки, поэтому вы получите ActiveRecord::StatementInvalid
.