我正在尝试开发一个只需要一个控制器的应用程序,并使用 url 中的任何内容作为该控制器的参数。
我读过通常将 url 解析为 GET 控制器/动作,如 example.com/controller/action/params,但我想使用特定的控制器和特定的动作。
有什么方法可以将 URL 解析为 example.com/params,始终由相同的操作和控制器处理?
我正在尝试开发一个只需要一个控制器的应用程序,并使用 url 中的任何内容作为该控制器的参数。
我读过通常将 url 解析为 GET 控制器/动作,如 example.com/controller/action/params,但我想使用特定的控制器和特定的动作。
有什么方法可以将 URL 解析为 example.com/params,始终由相同的操作和控制器处理?
我认为这是个坏主意,但是您可以使用渲染操作来做到这一点:
def index
if self.class.instance_methods(false).include? params[:page].to_sym
render action: params[:page]
else
#error_404
end
end
就在这里。在您的config/routes.rb
文件中定义路线:
match "catchall/*page", :to => "catchall#respond"
然后在你的控制器中:
class CatchallController < ApplicationController
def respond
end
end
Rails路由指南中有几个这样的例子。该文件config/routes.rb
是您设置从 URL 到控制器的映射的位置。
一个具体的例子是这样的:
match '/:username' => 'users#show'
任何不匹配的请求都将被路由到UsersController
'show
方法,并在params
哈希中传递字符串作为username
键的值。