将路由命名空间约束为JSON格式

时间:2017-02-20 17:00:45

标签: ruby-on-rails json routing

我对将路由命名空间限制为格式的众多方法感到有些困惑。我想知道不同方法之间的区别是什么:

  1. format选项设置为:

    namespace :api, format: 'json'
    
  2. 根据docs

      

    :格式

         

    允许您指定可选格式段的默认值,或通过提供false来禁用它。

    这与在控制器中使用before_action相同:

    before_action :set_format
    
    def set_format
      reqeust.format ||= :json
    end
    

    1. defaults哈希值中设置格式:

      namespace :api, defaults: { format: 'json' }
      
    2. constraints哈希值中设置格式:

      namespace :api, constraints: { format: 'json' }
      
    3. 但是,根据Rails指南中Request-Based Constraints部分的第二个注释:

        

      格式约束有一个例外:虽然它是Request对象上的一个方法,但它也是每个路径上的隐式可选参数。段约束优先,格式约束仅在通过哈希强制执行时才应用。例如,获取'foo',约束:{format:'json'}将匹配GET / foo,因为默认情况下格式是可选的。但是,您可以在get'foo'中使用lambda,约束:lambda {| req | req.format ==:json},路由只匹配显式JSON请求。

      导致:

      1. 在lambda中明确设置格式:

        namespace :api, constraints: lambda { |req| req.format == :json }
        
      2. 有人可以解释这四种方法的细微差别吗?

        谢谢。

0 个答案:

没有答案