Adinda Praditya wrote:

> Hi all,
> 
> Merupakan cara yang biasa untuk mencegah error record not found dengan
> rescue. Namun untuk kasus yang sederhana berikut ini, rails (1.2.3-20) tidak
> bisa. Ini method di kontroller saya:
> 
> def show_page
> begin
> load_data
> @page = Page.find_by_name(params[:name])
> rescue ActiveRecord::RecordNotFound

Active Record finder dinamis tidak lempar exception bila no record 
found, Anda bisa mengakali dengan

def show
   @page = Page.find_by_name(params[:id])
   raise ActiveRecord::RecordNotFound unless @page
rescue ActiveRecord::RecordNotFound
   flash[:error] = 'Halaman tidak ditemukan'
   redirect_to pages_url
end

> logger.error("Attempt to access invalid page #{params[:name]}")
> redirect_to_index("Halaman tidak ditemukan")
> end
> end
> 
> namun untuk method yang lain, dengan kode serupa, yang membedakan hanya
> params[:id], tidak muncul error. Btw, error-nya bukan no record found, tapi
> NoMethodError karena atribut dari @page yang ada di viewer nggak ada.
> 
> Saya lihat di log, yang membedakan cuman 'LIMIT 1'.
> 
> log saat menjalankan method dengan params[:id]
> 
> Product Load (0.065676) SELECT * FROM products WHERE (products.`id` = 732)
> Attempt to access invalid product 732
> Redirected to http://localhost:3000/ <http://localhost:3000/>
> 
>  >>> Perhatikan, di sini rescue berhasil, sedangkan menjalankan method 
> dengan
> params[:name] langsung di by-pass ke "rendering within layouts/store ..."
> dan seterusnya
> 
> Page Columns (0.023000) SHOW FIELDS FROM pages
> Page Load (0.000610) SELECT * FROM pages WHERE (pages.`name` = 'store')
> LIMIT 1
> Rendering within layouts/store
> Rendering store/show_page
> 
> Ada yang bisa kasih penjelasan mengapa bisa demikian? Dan gimana cara
> menangkap error ini lalu mengarahkannya ke controller lain?

saya hargai kerja keras anda mencari sampai segitunya :-) semoga 
berhasil dg trik yg tadi ya..

> Thanks,
> 
> Dida

-- 
http://ariekusumaatmaja.wordpress.com/about
Labels don't help you make your point. Be descriptive both for 
correcting and for reinforcing feedback.

Kirim email ke