在我的索引操作中,我有以下代码:
@hotels = Hotel.where(lang: request.headers['Accept-Language']).includes(:contacts)
raise ActiveRecord::RecordNotFound if @hotels.blank?
我提出异常是因为我希望它由错误处理代码处理(基于rescue_from)
有没有更好的方法来编写代码,以便它做同样的事情,即提出异常?我先做! (注意爆炸)当检索单个记录时,但是对于集合来说,似乎没有办法做同样的事情(没有地方!,所有!...)
它有意义吗?
答案 0 :(得分:1)
在您的控制器中,您可以添加before_filter
before_filter :check_hotels, :only => [:index]
def index
end
private
def check_hotels
@hotels = Hotel.where(lang: request.headers['Accept-Language']).includes(:contacts)
redirect_to root_path, :notice => "No hotels present." if @hotels.blank?
end
当然,除了root_path
之外,你可以提供任何其他路径,这只是我展示的一个例子
答案 1 :(得分:0)
class HotelsController < ApplicationController
rescue_from ActiveRecord::RecordNotFound, with: :blank_list
private
def blank_list
logger.error "No Hotel Found With #{request.headers['Accept-Language']}"
redirect_to root_path, notice: 'No hotels present'
end
end