如何在永久链接中创建Rails路由 - 没有URL中的控制器?

时间:2009-09-04 14:38:34

标签: ruby-on-rails

我目前正在使用Permalink_fu插件,该插件正确创建以下URI:

http://localhost:3000/pages/some-permalink-to-page

我现在想要配置我的路由,以便我可以从URI中删除/ pages / part,而不是:

http://localhost:3000/some-permalink-to-page

我尝试将以下内容添加到config / routes.rb文件的底部:

map.connect ':permalink', :controller => 'page', :action => 'view'

但是当我尝试新的URI时出现以下错误:

uninitialized constant PageController

你有什么建议吗?我正在运行Rails 2.2.2并且还不愿意尝试使用edge rails。

非常感谢,

...奔

3 个答案:

答案 0 :(得分:0)

在你的路线中,应该:控制器是“页面”(复数)?

答案 1 :(得分:0)

谢谢迈克,我犯了一些错误。这就是我的工作方式。 在routes.rb文件中,在页面底部附近添加以下路由:

map.connect ':id', :controller => 'pages', :action => 'show'

现在的问题是,任何糟糕的网址都会严重失败,例如。

http://localhost:3000/this-permalink-doesnt-exist

将导致失败而不是404错误。

我通过在pages_controller.rb show 操作中添加以下行来解决此问题:

  def show
    @page = Page.find_by_permalink(params[:id])
    if @page.nil? then
      render :file => 'public/404.html', :status => '404'
    else
      respond_to do |format|
        format.html # show.html.erb
        format.xml  { render :xml => @page }
      end
    end
  end

现在,我为URL的所有变体获得了正确的行为:

http://localhost:3000/pages/some-permalink-to-page
http://localhost:3000/some-permalink-to-page
and the if an invalid permalink is entered
http://localhost:3000/no-such-permalink
gets rendered to the default public/404.html file.

希望能帮助其他人,并再次感谢迈克。 本...

答案 2 :(得分:0)

您的routes.rb条目中存在拼写错误:

map.connect ':permalink', :controller => 'page', :action => 'view' 

应该是:

map.connect ':permalink', :controller => 'pages', :action => 'view'

:controller参数是控制器的单数名称,应该是'pages'