Pertanyaan Rekaman Rails 4.0 tidak ditemukan


pada tindakan edit saya, saya tidak pernah naik catatan tidak ditemukan jika catatan tidak ada. Apa yang saya lakukan salah.

Berikut ini tindakan edit saya

    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 

Saya selalu mendapatkan metode yang tidak ditentukan `negara 'untuk nol: NilClass untuk catatan edit saya yang tidak ada bandingannya.

Saya juga menaikkan catatan yang tidak ditemukan pada aksi pertunjukan saya, tetapi saya ingin menggunakan halaman 404.html yang saya miliki di folder publik saya. Bagaimana saya bisa menggunakan file ini ???

Terima kasih sebelumnya


5
2017-07-12 20:45


asal


Jawaban:


Masalahnya adalah garis Anda @offer = Offer.find_by(edit_hash: params[:edit_hash]) tidak merespons ActiveRecord::RecordNotFound. Itu merespons dengan nil.

Anda dapat melihat ini dengan membuka konsol Rails Anda dari direktori aplikasi Anda rails c. Di konsol, letakkan ini di:

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

Anda akan melihat bahwa outputnya => nil. Anda kemudian dapat mengetik @offer dan Anda akan melihat outputnya, sekali lagi, adalah => nil. Sekarang, masukkan baris ini ke konsol:

@offer = Offer.find(99999)

Anda akan melihat bahwa outputnya ActiveRecord::RecordNotFound: Couldn't find Offer with id=99999.

Untuk memperbaiki masalah, tambahkan a ! untuk Anda find_by panggilan, jadi mereka seperti ini:

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

Ini akan menyebabkan Rails merespon dengan ActiveRecord::RecordNotFound: ActiveRecord::RecordNotFound dari pada nil.


12
2017-07-12 21:00