Is it possible to refresh page and flash a notification to handle an error? I'm getting this error on my "choose_plan#new" page if the user presses the "checkout#new" button without selecting a plan. I'd prefer to show a nofication instead of only making my button work if they've selected a plan.
The error:
ActiveRecord::RecordNotFound (Couldn't find Plan without an ID):
My code:
class ChoosePlanController < ApplicationController
def new
@plans = Plan.all
class CheckoutController < ApplicationController
def new
@plan = Plan.find(params[:plan])
I'm using rails 7.0.1 and ruby 3.1.2
CodePudding user response:
You can use find_by which doesn't raise an error and will return nil if nothing is found.
def new
if params[:plan].blank?
redirect_to new_choose_plan_path, notice: "Please, select a plan."
return
end
@plan = Plan.find_by(id: params[:plan])
unless @plan
redirect_to new_choose_plan_path, notice: "No plan found."
return
end
# ...
end
CodePudding user response:
rescue the error and flash a notice.
class CheckoutController < ApplicationController
def new
begin
@plan = Plan.find(params[:plan])
rescue ActiveRecord::RecordNotFound => e
flash.notice = e
end
...
end
end
You'll probably also want to render something.
Alternatively, you can use where and first instead of find. This will not raise an error, then check if there is a plan.
class CheckoutController < ApplicationController
def new
@plan = Plan.where(id: params[:plan]).first
if @plan
...
else
flash.notice = "Plan not found"
end
end
end
