я столкнулся вопросом сегодня я не видел - у меня есть пользовательская проверка, чтобы проверить, если код скидки уже используется в моей модели заказа:Сообщения об ошибках Rails
validate :valid_discount_code
def valid_discount_code
is_valid = false
code = nil
if discount_code.present?
if discount_code.try(:downcase) == 'xyz'
code = 'xyz'
is_valid = true
else
code = Coupon.find_by_coupon_code(discount_code)
is_valid = code.present?
end
if code.nil?
is_valid = false
errors.add(:discount_code, "is not a valid referral code")
elsif (code.present? && Coupon.where(email: email, coupon_code: code).present?)
is_valid = false
errors.add(:discount_code, "has already been used.")
end
puts "------------"
puts errors.full_messages ## successfully 'puts' the correct error message into my console.
puts "------------"
if is_valid
.... do stuff.....
end
end
end
В моем контроллере:
Таким образом, это похоже на update_attributes, оно выполняет проверку, не выполняет проверку, создает сообщение об ошибке, а затем, когда оно вернулось на мой контроллер, сообщение об ошибке исчезло. Я в тупике, что может быть причиной этой проблемы.
EDIT:
Вот что current_order является:
В ApplicationController.rb:
def current_order
session[:order_id].present? ? Order.find(session[:order_id]) : Order.new
end
Что такое 'current_order'? Это переменная или метод? Вы можете проверить это на консоли и подтвердить, что все это в контроллере. – Swards
@swards current_order - это метод в моем контроллере приложений, я включу этот метод в редактирование выше – asalgan
. Еще одна потенциальная проблема - это «params [: coupon_code] .downcase» пустым? – Swards