在索引操作中引发ActiveRecord :: RecordNotFound

时间:2014-05-26 10:07:37

标签: ruby-on-rails exception activerecord

在我的索引操作中,我有以下代码:

@hotels = Hotel.where(lang: request.headers['Accept-Language']).includes(:contacts)
raise ActiveRecord::RecordNotFound if @hotels.blank?

我提出异常是因为我希望它由错误处理代码处理(基于rescue_from)

有没有更好的方法来编写代码,以便它做同样的事情,即提出异常?我先做! (注意爆炸)当检索单个记录时,但是对于集合来说,似乎没有办法做同样的事情(没有地方!,所有!...)

它有意义吗?

2 个答案:

答案 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