2011-06-21 7 views
2

モデルベースではないコントローラを備えたRails 3アプリがあります。これは一連のスライドを提供するために使用しています。 SlideControllerは、前の&の現在のスライドの正しいIDを特定し、そのIDをforward戻るボタンのビューのlink_toヘルパーに送ります。Ruby on Railsルーターの奇妙さ

最初のページの[進む]ボタンのツールヒントは、http://localhost:3000/slide/2/となります。私はそれを右クリックし、 "リンクの場所をコピー"を選択し、アドレスバーに貼り付けると、それは動作します。私はjavascript経由でURLを呼び出すとき、それは動作します。私はそれをクリックすると、そのメッセージ

ActionController :: RoutingError(Noルートの試合「/スライド/スライド/ 2」)で失敗

それは私のローカルサーバーに問題だった場合、私は展開疑問に思いますヘロクに、同じエラーがあった。

なぜこのリンクは整形されたように見えますが、ルータによって処理されていないのはなぜですか?

ありがとうございます!

routes.rbを


RadioDose::Application.routes.draw do 
    get "/slide/:id" => "slide#show", :as => 'slide' 
    get "/slideshow" => "slide#show" 
end

slide_controller.rb


class SlideController < ApplicationController 
    def show 
     @id = (params[:id].blank? ? '1' : params[:id]) 
     @slide_name = 'slide' + @id 
     max_slide = 40 
     @last_slide = (@id.to_i > 1 ? @id.to_i - 1 : 1) 
     @next_slide = (@id.to_i < max_slide ? @id.to_i + 1 : max_slide) 
    end 
end

show.html.erb <%= render :partial => @slide_name %>

<%= link_to 'Back', slide_path(@last_slide), :id => 'left-arrow', :class => 'sprite' %> <%= link_to 'Next', slide_path(@next_slide), :id => 'right-arrow', :class => 'sprite' %>

Page <%= @id %> <%= javascript_include_tag 'slide' %>

+0

'rake routes'の出力をあなたの質問に追加してください。 –

+1

あなたのJSから来ていると思いますが、その重要な部分をコピー/貼り付けても構いませんか? –

答えて

0

あなたが貼り付けられたエラーメッセージは、あなたが知る必要があるすべてを伝えます。リンクをクリックすると、http://localhost:3000/slide/2ではなく、http://localhost:3000/slide/slide/2に誘導されています。リンクをコピー&ペーストするときにリンクが働いていて、標準のslide_pathを使用していると、リンクがHTMLで正しいことが示唆されていますが、JavaScriptでエラーが発生している可能性があります。

おそらく、URLとは相対的ではなく、現在のページとの相対的な扱いがURLの単純な場合です。

スライドがデータベースによってバックアップされていない場合でも、ここでもRESTfulルートを使用できます。あなたの全体のアプリは、単一のスライドショーの場合は、次のコマンドを使用します。その後、

RadioDose::Application.routes.draw do 
    resources :slides 
end 

または複数のスライドショーをサポートしたい場合は、:

RadioDose::Application.routes.draw do 
    resources :slideshows do 
     resources :slides 
    end 
end 

次に、あなたはのindexアクションのいずれかから最初のスライドを表示することができますSlidesコントローラ、または2番目の例では、Slideshowコントローラのshowアクションです。