我正在尝试在rails 3 app中设置一些semistatic页面, 我创建了一个带有一些非静止动作的页面控制器
class PagesController < ApplicationController
def home
end
def about
end
def contact
end
def monday
end
def saturday
end
def sunday
end
end
它在页面/星期一等显示页面......或/星期一等...如果我按照rails 3 removing controller name form url设置路线
但我只是想知道是否可以将丢失的网址重定向到/。根据exampel我有/星期一设置,但如果一个玩网址和输入/周二它不会打页。我可以重定向这种行为吗?
== EDIT ==
我已将代码更改为:
resources :pages, :path => '/' do
collection do
# # match 'tuesday' => redirect('/')
# # match 'wednesday' => redirect('/')
# # match 'friday' => redirect('/')
%w{home monday thursday saturday sunday about contact resources}.each do |url|
get url
end
end
end
match 'pages/*page' => :root
url重写可以很好地循环遍历数组。 我尝试将wild cardline放在我的根文件的底部和resources:page块的底部。但是我得到了“无法找到控制器动作节目”的消息。
match 'pages/*page' => :root
是否正确的地方将其限制为/ tuesday之类的丢失网址以生成错误页面? 是否也可以将此重定向仅限制为几个操作而不是所有丢失的页面?从星期二,星期三,星期五开始...
答案 0 :(得分:2)
您可以使用通配符路由来执行此操作。在您的routes.rb结尾处添加以下行:
match '*page' => :root
并且缺少的页面将重定向到root,并将params [:page]设置为所请求的URL。
如果您只想重定向Pages控制器中缺少的页面,请改为执行此操作
match 'pages/*page' => :root
您可以阅读有关路由here的更多信息。在文章末尾附近解释了通配符路由。
希望这有帮助!
答案 1 :(得分:2)
让它运作
我将通配符行更改为
match '*page' => redirect('/')
而不是=&gt; :root,并将其留在资源:pages block。