Rails路由:将路由上的请求限制为仅一种格式

时间:2012-11-03 22:05:04

标签: ruby-on-rails routing

我有以下路线:

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

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

相反,所有请求都由路由转换为JS格式,因此HTML请求获取json哈希值。

这不是绝对关键,但如果我能干净地限制这条路线以便不允许HTML请求,我会更高兴。应如何处理?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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

然而,@ prusswan的回答是合乎逻辑的做法,并且更加明确。保持控制器薄是一件好事,但保持可读性更好

答案 2 :(得分:1)

你可以试试这个

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