繁体   English   中英

Ruby on Rails路由器怪异

[英]Ruby on Rails router weirdness

我有一个带有基于非模型控制器的Rails 3应用程序,我正在使用它来提供一系列幻灯片。 SlideController会找出上一张和当前幻灯片的正确ID,然后将该ID馈送到视图中用于前进和后退按钮的link_to帮助器。

第一页上前进按钮上方的工具提示为: http:// localhost:3000 / slide / 2 / 当我右键单击它时,选择“复制链接位置”并将其粘贴到地址栏中,即可正常工作。 当我通过javascript调用网址时,它可以正常工作。 当我单击它时,失败并显示以下消息

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' %>

您粘贴的错误消息告诉您需要了解的所有信息。 单击链接时,您将被定向到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第二张幻灯片,或者在第二个示例中为“幻灯片”控制器的show动作来show

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM