Если current_user
не имеет отношения к UserFund
объекту, который будет сохранен, то я думаю, что было бы лучше преобразовать валидатор в отдельный метод.А поскольку этот метод подразумевает некоторые знания о User
классе, имеет смысл переместить его в User
класс как метод экземпляра (или если admin и user различны, то в класс admin):
class User < ApplicationRecord
def amount_too_big?(amount)
return admin? && amount > 100 || cs? && amount > 25 || staff? && amount > 15
end
end
и вызовите этот метод в контроллере перед сохранением UserFund
объекта:
if current_user.amount_too_big?(amount)
# Render error message about unacceptably big funds
return
end
Почему так?Весьма вероятно, что объект current_user
определяется некоторым фильтром контроллера, поэтому он доступен только в контроллерах и представлениях.А UserFund
объект имеет доступ только к User
модельным фондам, к которым он относится.Предоставление доступа к current_user
из UserFund
возможно только путем вызова другого метода и передачи current_user
в качестве аргумента, который не принимается при проверке.
Другой момент: при запуске из консоли rails, current_user
не определено.UserFund
объект не будет знать, что такое current_user
, поэтому вообще не может его использовать.