1

在我的程序中,我必须使用产品 ID 获取产品信息,如下所示:

# Show the product info.
def show
    @product = Product.find params[:id]

    if !@product
        redirect_to products_path, :alert => 'Product not found!.'
    end
end

如果该产品不存在,我会遇到 Rails 错误Couldn't find Product with id=xxx。我想覆盖此错误消息并自己将错误显示为闪光警报。

我怎样才能做到这一点?提前致谢。

4

4 回答 4

4

如果没有找到产品而不是异常,您可以编写Product.try(:find, params[:id])or并获得 nilProduct.find_by_id params[:id]

于 2012-08-15T10:52:47.950 回答
1

find 方法总是引发 ResourceNotFound。如果您只想为此操作自定义错误消息,您可以这样做:

def show
    @product = Product.find_by_id params[:id]

    if @product.blank?
        redirect_to products_path, :alert => 'Product not found!.'
    end
end 
于 2012-08-15T10:55:32.230 回答
1
def show
    begin
      @product = Product.find params[:id]
    rescue ActiveRecord::RecordNotFound => e
      redirect_to products_path, :alert => 'Product not found!.'
    end
end

总是尝试挽救特定的异常,这会给你想要的结果。正如@Emrah 提到的,当没有给定 id 的记录时,find方法会引发。ActiveRecord::RecordNotFound

于 2012-08-15T11:05:33.997 回答
0

如果未找到任何内容,则指定该find方法以引发错误。您可以使用 ARel 样式

@product = Product.where(:id => params[:id]).first

相反,它将返回nil一个空结果。

于 2012-08-15T10:58:48.417 回答