我正在创建一个新的控制器/路由,只允许HTTP GET和HTTP POST。 URL应该是/ foo。我的路线自然如下:
map.connect 'foo',
:conditions => { :method => :get },
:controller => "foo",
:action => "display_something"
map.connect 'foo',
:conditions => { :method => :post },
:controller => "foo",
:action => "register_foo"
我不明白的一部分是,http://example/foo/1会提出“未知行动”。我不希望/ foo / N可以访问。它应该给用户一个404而不是抛出ActionController :: UnknownAction。
仔细观察RouteSet对象,我们有以下内容:
>> rs.recognize_path "/foo/1"
=> {:controller=>"foo", :action=>"1"}
所以它找到了一条路线,这就是我们没有404的原因。
我是否必须在ApplicationController中使用method_missing进行操作,以便在缺少操作方法时抛出404?如果没有动作我只想要404被抛出。在我的应用程序/ foo / N没有意义,我不想混淆用户。
答案 0 :(得分:2)
查看@ ActionController::Rescue
的API文档,似乎ActionController::UnknownAction
的救援响应默认为=> :not_found
。我相信,在生产模式下,应该呈现404.尝试在生产模式下运行您的应用程序&看看它是如何响应的(或者,您应该只能在日志中看到HTTP返回码。