Saya tidak menanyakan bagaimana routes-nya, akan tetapi bagaimana
controller-nya, yang sebenarnya sudah cukup jelas saya sebutkan:
> menangani index action untuk path yang berbeda (katakan /speeches/ dengan
> /bundles/1/speeches/ ). Mohon pencerahannya.
Dan saya sudah menemukan jawabannya yaitu:
def index
if params[:bundle_id]
@bundle = Bundle.find(params[:bundle_id])
unless @bundle.nil?
@speeches = @bundle.speeches
else
flash[:notice] = 'No Bundle found'
redirect_to bundle_path
end
else
@speeches = Speech.find(:all)
end
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @speeches }
end
end
Sehingga kalo ada params[:bundle_id] dalam hal ini berarti menangani
/bundle/1/speeches/ maka cari bundle-nya dan lihat speeches yang dimiliki
oleh bundle itu. Jika tidak ada, maka cari @speeches dari database dan lalu
dikirim ke viewer.
Namun saya masih bermasalah menangani error saat bundle_id tidak ada dalam
database. Dari kode controller di atas, saya dapat RecordNotFound error. Ini
yang pertama.
2. Saya sudah coba find_by_id (saran dari teman) juga tidak bisa, saya dapat
Routing Error ini:
bundle_url failed to generate from {:action=>"show",
:controller=>"bundles"} - you may have ambiguous routes, or you may
need to supply additional parameters for this route. content_url has
the following required parameters: ["bundles", :id] - are they all
satisfied?
3. Saya sudah coba tambahkan rescue ActiveRecord::RecordNotFound seperti
pada http://pastie.org/270189 saya dapat error NoMethodError untuk speech
object. Ok, saya paham, ini karena baris:
@speeches = @bundle.speeches
sementara @bundle-nya nil. Lalu saya tambahkan block unless @bundle.nil?
seperti kode di atas, kembali lagi saya dapat Routing Error. Penasaran
dengan routes.rb saya? Ini saya kasi secara lengkap:
http://pastie.org/270210 (padahal sudah sama dengan jawaban mas Arie)
Ampun d, udah coba macem2, dimana salahku? Dosa apa gw? : )
Thanks,
Dida
2008/8/28 Arie Kusuma Atmaja <[EMAIL PROTECTED]>
> Adinda Praditya wrote:
>
> > Nah, bagaimana membedakan hal ini di SpeechController?
>
> mestinya anda yang tukang kodingnya yang menjawab *bagaimana membedakan*
> nya
>
> yg dibawah ini adalah satu solusi yg harus bundle_id ketahuan/alias bisa
> dipanggil lewat callback.
>
> > Misalnya dalam
> > menangani index action untuk path yang berbeda (katakan /speeches/ dengan
> > /bundles/1/speeches/ ). Mohon pencerahannya.
>
> saya rephrase pertanyaannya langsung dlm bentuk path saja ya.
>
> GET /bundles # BundleController#index
> GET /bundles/:bundle_id/speeches # SpeechController#index
>
> map.resources :bundles do |bundle|
> bundle.resources :speeches
> end
>
> silakan reply lagi kalau ini tidak menjawab masalah anda.
>
> http://ariekeren.blogdetik.com
> "Don't ask if you can ask, just ask!", R2D2
>
[Non-text portions of this message have been removed]