我目前正在使用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。
非常感谢,
...奔
答案 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'