5

在我的编辑操作中,如果记录不存在,我永远不会找到未找到的记录。我做错了什么。

这是我的编辑操作

    class OffersController < ApplicationController

    rescue_from ActiveRecord::RecordNotFound, with: :record_not_found        

    def show
        @offer = Offer.find(params[:id])
    end        

    def edit
        @offer = Offer.find_by(edit_hash: params[:edit_hash])
        @country = Country.find_by(name: @offer.country)
        @states = State.find(:all, :conditions => { country_id: @country })
    end

    private

        def record_not_found
            render text: "404 Not Found", status: 404
        end
    end 

对于我不存在的编辑记录,我总是得到 nil:NilClass 的未定义方法“国家”。

我还提出了在我的显示操作中找不到的记录,但我想使用我在公共文件夹中的 404.html 页面。这个文件怎么用???

提前致谢

4

1 回答 1

12

问题是您的线路@offer = Offer.find_by(edit_hash: params[:edit_hash])没有响应ActiveRecord::RecordNotFound. 它以 响应nil

您可以通过使用rails c. 在控制台中,将其放入:

@offer = Offer.find_by(edit_hash: params[:edit_hash])

你会看到它的输出是=> nil. 然后你可以输入@offer,你会再次看到它的输出,is => nil。现在,将此行放入控制台:

@offer = Offer.find(99999)

你会看到它的输出是ActiveRecord::RecordNotFound: Couldn't find Offer with id=99999.

要解决此问题,!请在您的find_by呼叫中添加一个,因此它们是这样的:

@offer = Offer.find_by!(edit_hash: params[:edit_hash])

这将导致 Rails 响应ActiveRecord::RecordNotFound: ActiveRecord::RecordNotFound而不是nil.

于 2013-07-12T21:00:34.983 回答