Feb27

pernah mengalami error yang seperti ini ?

ActiveRecord::RecordNotFound in UsersController#blah

Couldn’t find User with ID=900

ini adalah error ketika active record tidak menemukan kolom data yang id-nya 900, dalam kasus saya, error ini terjadi karena user mengakses url http://localhost:3000/users/blah/900

codenya ada di UsersController.rb sebagai berikut :


def blah
    @user=User.find(900)
end

dari sisi coding, tidak ada yang salah dengan kode saya, jadi tidak ada yang perlu diubah , ini terjadi karena users salah mengetik url atau memang sengaja menulis url demikian, http://localhost:3000/users/blah/900 (so blame the users. NOT programmer :D ), namun problemnya bila hal tersebut terjadi di production server, akan menjadi masalah yang cukup pelik bila users melihat exception berbaris-baris yang tidak dia mengerti, nah ada beberapa solusi untuk menghindari hal ini, salah satunya dengan menggunakan a.k.a meng-override method rescue_action_in_public di application.rb

ini adalah method khusus di controller yang menangkap semua exception yang terjadi pada Rails, defaultnya seperti yang saya jelaskan sebelumnya, itu akan menampilkan pesan exception yang berbelit-belit yang bagi users kebanyakan tidak akan dimengerti, dengan mengoverride method tersebut kita bisa menampilkan exception yang lebih users friendly dan lebih nyaman di mata users, contoh kodenya sebagai berikut

protected
def rescue_action_in_public(exception)
      case exception
      when  ActiveRecord::RecordNotFound
        @message = "Mohon maaf, tidak ditemukan data yang relevan"
      else
        @message =  "Mohon maaf, halaman yang anda maksud tidak tersedia di website kami"
      end
	
      render  :template => "layouts/exception"
 end

di dalam kode tersebut, rescue_action_in_public akan me-render template yang berada di app/views/layout/exception.rhtml, maka di file exception.rhtml tsb anda bisa membuat template rhtml sebagai berikut

<h1>Warning : ada kesalahan</h1>
<p><%= @message %></p>
<p>Klik di <%= link_to "sini",action=>"home" %> untuk kembali ke halaman utama</p>

so dengan begitu tidak ada lagi halaman aneh yang bisa membingungkan users, namun bagi programmer, exception sebenarnya tetap bisa terlihat, karena method tersebut hanya dipanggil jika request datang bukan dari localhost, so ini memudahkan programmer dalam melakukan pengkutuan debugging, akhir kata users senang, programmer pun senang :D

Komentar

Trackback: Use this URI to trackback this entry. Use your web browser's function to copy it to your blog posting.

Gravatar: You can have a picture at the top of each your comments by getting a Gravatar

Belum ada komentar.

RSS feed for comments on this post.

Leave a comment

Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>



Anti-spam measure: please retype the above text into the box provided.