2011-06-21 87 views
2

我有一個Rails 3應用程序,我使用的是基於非模型的控制器來提供一系列幻燈片。 SlideController會計算出當前幻燈片的前一個&的正確ID,然後將該ID提供給該視圖中的link_to幫助程序,以用於前向&後退按鈕。Ruby on Rails路由器奇怪

第一頁上的前進按鈕上的工具提示顯示爲:http://localhost:3000/slide/2/。當我右鍵點擊它時,選擇「複製鏈接位置」並將其粘貼到地址欄中,即可使用。當我通過JavaScript調用url時,它可以工作。當我點擊它,它失敗

的ActionController :: RoutingError(無路由匹配「/幻燈片/滑動/ 2」)

想知道它是與我的本地服務器有問題,我部署的消息到Heroku,並得到了同樣的錯誤。

爲什麼這個鏈接看起來完美的格式化,但它不是由路由器如何處理?

謝謝!

的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/slide/2而不是http://localhost:3000/slide/2。考慮到複製和粘貼鏈接時出現問題,並且您使用的是標準slide_path,這表明該鏈接在HTML中是正確的,但正在發生某些事情可能會在JavaScript中將其分解。

這可能只是一個簡單的例子,被認爲是相對於當前頁面的URL,而不是相對於根。

順便說一下,即使您的幻燈片沒有由數據庫備份,仍然可以在這裏使用RESTful路線。如果你的整個應用程序是一個單獨的幻燈片,使用方法:

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

,或者如果你想支持多個幻燈片,然後:

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

然後,你可以從任一的index動作顯示第一張幻燈片幻燈片控制器,或在第二個示例中,Slideshow控制器的show操作。