Ruby on Rails匹配路由错误

时间:2011-12-23 20:35:38

标签: ruby-on-rails rails-routing

我正在尝试创建一个提供简单静态HTML页面的Rails应用程序。我按照Mikel的教程here(它涉及制作一个Pages控制器并设置一些路由)但我不断收到错误信息。

我制作了一个app/views/site/pages/_about.html.erb文件来包含我的“关于”页面。启动rails server后,我尝试转到http://localhost:3000/about/,但它给了我一个路由错误,因为我有一个“未初始化的常量站点。”

My project is uploaded to GitHub如果您想查看代码。

编辑:这是我的config/routes.rb文件:

NINAgallery::Application.routes.draw do
  match ':page_name' => 'site/pages#show'
end

这是我app/controllers/pages_controller.rb文件的重要部分:

class PagesController < ApplicationController

  layout 'site'

  def show
    @page_name = params[:page_name].to_s.gsub(/\W/,'')
    unless partial_exists?(@page_name)
      render 'missing', :status => 404
    end
  end

  # extra code for handling 404 errors goes here

end

4 个答案:

答案 0 :(得分:1)

site/pages#show表示Site::PagesController

中的展示操作

您需要将控制器放在路径所暗示的命名空间中或更改路径

答案 1 :(得分:1)

PagesController中的最后一行是:

ValidPartials = Site::PagesController.find_partials

这意味着PagesController包含在Site模块中。但是您的应用中没有Site模块。

我认为简单删除Site ::应该解决问题:

ValidPartials = PagesController.find_partials

加上路线:

match ':page_name' => 'pages#show'

答案 2 :(得分:1)

您的应用程序称为NINAgallery

Site第27行中的pages_controller.rb替换为NINAgallery

PS:

我刚刚看了一眼所谓的教程。你的习惯真的很糟糕。

一些非常好的基础资源:

如果你喜欢教程:http://ruby.railstutorial.org/

还有很多关于铁轨的书籍。一切都好。

答案 3 :(得分:0)

除了名称空间问题之外,您还需要将“app”Gem添加到Gemfile中,如教程中所述。

我不知道为什么你删除了工作代码中静态页面的缓存。我在应用程序工作并维护缓存问题时提出了拉取请求。如果其他人感兴趣,则代码为here

ryan bates也有一个名为"Semi static pages"的教程,它做了类似的事情。我鼓励你遵循他的解决方案,因为很少有人误解。