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.