【问题标题】:Rails 3 Routes and Format Specificity [duplicate]Rails 3路线和格式特异性[重复]
【发布时间】:2011-05-11 09:13:31
【问题描述】:

我正在尝试将路由文件中的路径限制为特定格式。

我希望这个工作: app.com/party_favors/list.json

不是这个

app.com/party_favors/list 或者这个 app.com/party_favors/list.html或这个 app.com/party_favors/list.asdasdasda

有没有一种简单的方法只允许在路由文件的匹配条目中使用某种格式?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby routes


    【解决方案1】:

    如果要将这些路由限制为特定格式(例如 html 或 json),则必须将它们包装在范围内。不幸的是,在这种情况下,约束不能按预期工作。

    这是一个这样的块的例子......

    scope :format => true, :constraints => { :format => 'json' } do
      get '/bar' => "bar#index_with_json"
    end
    

    更多信息可以在这里找到:https://github.com/rails/rails/issues/5548

    这个答案是从我之前的答案复制过来的。

    Rails Routes - Limiting the available formats for a resource

    【讨论】:

      【解决方案2】:

      Rails 3 提供了可以在路由上指定的:constraints option。这可以将相同的 url 路由到不同的控制器,具体取决于格式:

      # http://app.com/party_favors.html gets routed to Web::PartyFavorsController#index
      resources :party_favors, :module => "web", :constraints => {:format => :html}
      
      # http://app.com/party_favors.xml gets routed to PartyFavorsController#index
      resources :party_favors
      

      我在 Rails 2 中尝试了:requirements 选项,但它似乎没有那么灵活。我不知道有什么方法可以将它构建到 Rails 2 的路线中,因此您必须使用其他建议之一。

      【讨论】:

      • 这不会限制对这些格式的请求,请参阅下面的答案以了解正确的实现
      【解决方案3】:

      我发现以下内容对我有用 (Rails 3.1.1)

      match '/categories/:id.json'=>'categories#show', :format=>false, :defaults=>{:format=>'json'}
      

      【讨论】:

        【解决方案4】:

        你可以像这样显式地映射它

        match 'party_favors/list.json', :controller => 'party_favors', :action => 'list', :format => 'json'
        

        【讨论】:

        • 这就是我认为我应该能够做的,但是 rake 路由会在生成的路由的末尾添加一个 (.:format) :/
        • 我认为您必须定义所有路径并减少对生成器的依赖
        【解决方案5】:

        据我所知,您可以在控制器而不是路由中处理此问题

         respond_to do |format|
          format.html
          format.json { render :json => @abcd }
          format.any { render :text => "Invalid format", :status => 403 }
        end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-30
          • 1970-01-01
          • 2012-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多