Rails路由约束不按预期工作

时间:2015-07-15 03:39:50

标签: ruby-on-rails

今天早些时候我问过this问题,关于将所有路由包装成默认的json格式。我本可以发誓它早点工作但我可能弄错了。

为什么会这样:

resources :insurances, only: [:index, :show], :defaults => { :format => 'json' }

但这不是:

constraints format: :json do
  resources :insurances, only: [:index, :show]
end

我是否遗漏了关于约束如何运作的基本信息?

2 个答案:

答案 0 :(得分:3)

我偶然发现了这个问题,试图解决完全相同的问题。我已经解决了我的问题。我想你想要的是这个

//config/routes.rb
defaults format: :json do
  //Your json routes here
end

I found the solution here

如您在上面的链接中所见,您可以将其混合在作用域块中,如下所示:

//config/routes.rb
scope '/api/v1/', defaults: { format: :json } do
  //Your json & scoped routes here
end

这是我使用的版本。

测试了这两种方法,它们都有效。

测试环境:

  • Rails 5.2.2.1
  • Ruby 2.6.0p0

答案 1 :(得分:2)

块格式的约束检查Request对象,有时会将值作为字符串返回。使用以下代码将与:defaults示例相同 - 检查rake routes应在每条资源路径上显示{ :format => 'json' }选项。

constraints format: 'json' do
    resources :insurances, only: [:index, :show]
end

如果您更喜欢使用符号而不是字符串格式,可以通过lambda来实现:

constraints format: lambda {|request| request.format.symbol == :json }
    resources :insurances, only: [:index, :show]
end

来源:http://guides.rubyonrails.org/routing.html#request-based-constraints