3

我可以在路由文件末尾使用此行重定向所有(无效)url :

match '*a' => redirect('/') 

我想做重定向并在routes.rb.
类似的东西(这里的语法是错误的):

match '*a' => redirect('/'), :alert => "aaargh, you don't want to go to #{params[:a]}"

是否有可能做到这一点?

如果我在视图/控制器中执行此操作,我可以redirect_to在重定向页面上使用并传递一条 flash 消息(请参阅文档中的重定向示例)。创建一个新的控制器方法并在那里重定向会起作用,但它似乎不优雅......这是推荐的方式吗?

4

2 回答 2

4

对Jun 的回答稍作调整,我就可以做到这一点:

match '*a' => redirect { |p, req| req.flash[:error] = "aaargh, you don't want to go to #{p[:a]}"; '/' }

它将无效页面'/'与所需的(动态)消息一起重定向到。

如果你去www.your_website/a_bad_place这个传递消息'/'

啊,你不想去a_bad_place

.

您可以使用以下方法获取整个违规(无效)网址:

#{req.env["HTTP_HOST"]}#{req.env["REQUEST_PATH"]}

并用这个显示它:

match '*a' => redirect { |p, req| req.flash[:error] = "aaargh, you don't want to go to #{req.env["HTTP_HOST"]}#{req.env["REQUEST_PATH"]}"; '/' }

你会看到:

啊,你不想去www.yourwebsite/a_bad_place

于 2013-04-25T10:41:45.037 回答
2

我能做的最好的是:

match 'PATH' => redirect { |p, req| req.flash[:alert] = "MESSAGE"; '/' }
于 2013-04-25T06:25:29.970 回答