我有一个带有非模型控制器的Rails 3应用程序,我用它来提供一系列幻灯片。 SlideController计算出之前&的正确ID。当前幻灯片,然后将该ID提供给视图中的link_to帮助器以用于转发&后退按钮。
第一页上前进按钮上的工具提示显示为:http://localhost:3000/slide/2/。当我右键单击它时,选择“复制链接位置”并将其粘贴到地址栏中,它可以正常工作。当我通过javascript调用url时,它可以工作。当我点击它时,它失败并显示消息
ActionController :: RoutingError(没有路由匹配“/ slide / slide / 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 :(得分:0)
您粘贴的错误消息会告诉您需要知道的所有信息。当您点击该链接时,系统会将您定向到http://localhost:3000/slide/slide/2
而不是http://localhost:3000/slide/2
。鉴于链接在您复制并粘贴时正常工作,并且您使用标准slide_path
表明HTML中的链接是正确的,但是在您的javascript中发生了某种情况。
这可能只是将URL视为相对于当前页面而不是相对于root的简单情况。
顺便提一下,即使您的幻灯片未由数据库备份,您仍然可以在此处使用RESTful路由。如果您的整个应用只是一个幻灯片,请使用:
RadioDose::Application.routes.draw do
resources :slides
end
或者如果您想支持多个幻灯片,那么:
RadioDose::Application.routes.draw do
resources :slideshows do
resources :slides
end
end
然后,您可以显示幻灯片控制器的index
操作中的第一张幻灯片,或者在第二个示例中显示幻灯片控制器的show
操作。