1

我有以下路线:

resources :tags do
  collection do
    get 'autocomplete', :constraints => { :format => 'js' }
  end
end

我希望这仅响应 JS 请求(仅用于 jQuery 自动完成),对于常规 HTML 请求,我认为它应该是 404 响应,或者至少是重定向。

相反,所有请求都通过路由转换为 JS 格式,因此一个 HTML 请求得到一个 json 哈希。

这不是绝对重要的,但如果我能明确地限制这条路线以便不允许对它的 HTML 请求,我会更高兴。那应该怎么处理?

4

3 回答 3

2

TagsController#autocomplete中,执行以下操作:

respond_to do |format|
  # format.html { redirect_to some_path } # enable if you want to handle html requests as well
  format.js
end
于 2012-11-03T22:12:40.210 回答
1

你可以试试这个(未测试):

get 'autocomplete', :constraints => { :format => 'js' }, :defaults => {:format => nil}

但是,@prusswan 的回答是合乎逻辑的方式,而且更明确。保持控制器精简是一件好事,但保持它们的可读性更好

于 2012-11-03T22:44:33.610 回答
1

你可以试试这个

scope format: true, constraints: { format: 'html' } do get '/home' => 'home#index' end

于 2016-05-17T07:50:25.637 回答