Skip to main content

How to raise a warning message from the model

General • Asked by Sascha M.

Hi there,

In my rails app I have the parent model ORDERS with SALES as a child (as nested routes). So 1 Order has_many Sales and 1 Sale belongs_to Order. In my USER model I have the column "maxdiscount". This is the place where a manager types in a value, like 100 $.

Sales agents can give a discount on a SALE. To check if the entered value from the sales agent is not higher than the threshold defined in the maxdiscount I did this:

def discount=(discount)
 if discount.present?
   if current_user.maxdiscount >= discount.to_d
     discount = discount.gsub(",", ".") #gsub for changing comma-seperated values into dot-seperated.
     self[:discount] = discount
   end
 end
end

The check works as intended, but when the if-clause is true like the sales agent typed in a value higher than his maxdiscount threshold then the discount does not get saved. Which is kind of ok.. What I want to do is to raise a warning with a flash message but this does not work. So far I understood that you can't raise error messages from the model.
This is what I did, but that is not working :/

 def discount=(discount)
  if discount.present?
    if current_user.maxdiscount >= discount.to_d
     discount = discount.gsub(",", ".")
     self[:discount] = discount
    else
      self.errors.add(:base, "The discount is too high. The product was added without it.")
     end
   end
  end

Any suggestions? Thanks in advance!


Login or Create An Account to join the conversation.

Subscribe to the newsletter

Join 27,623+ developers who get early access to new screencasts, articles, guides, updates, and more.

    By clicking this button, you agree to the GoRails Terms of Service and Privacy Policy.

    More of a social being? We're also on Twitter and YouTube.