今天早些时候我问过this问题,关于将所有路由包装成默认的json格式。我本可以发誓它早点工作但我可能弄错了。
为什么会这样:
resources :insurances, only: [:index, :show], :defaults => { :format => 'json' }
但这不是:
constraints format: :json do
resources :insurances, only: [:index, :show]
end
我是否遗漏了关于约束如何运作的基本信息?
答案 0 :(得分:3)
我偶然发现了这个问题,试图解决完全相同的问题。我已经解决了我的问题。我想你想要的是这个
//config/routes.rb
defaults format: :json do
//Your json routes here
end
如您在上面的链接中所见,您可以将其混合在作用域块中,如下所示:
//config/routes.rb
scope '/api/v1/', defaults: { format: :json } do
//Your json & scoped routes here
end
这是我使用的版本。
测试了这两种方法,它们都有效。
测试环境:
答案 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