Rails 3 - Restricting formats for action in resource routes

前端 未结 4 1828
时光说笑
时光说笑 2020-12-23 20:06

I have a resource defined in my routes.

resources :categories

And I have the following in my Category controller:

  def sho         


        
相关标签:
4条回答
  • 2020-12-23 20:45

    You must wrap those routes in a scope if you want to restrict them to a specific format (e.g. html or json). Constraints unfortunately don't work as expected in this case.

    This is an example of such a block...

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

    More information can be found here: https://github.com/rails/rails/issues/5548

    This answer is copied from my previous answer here..

    Rails Routes - Limiting the available formats for a resource

    0 讨论(0)
  • 2020-12-23 20:46

    You could do the following in your routes.rb file to make sure that only the show action is constrained to json or xml:

    resources :categories, :except => [:show]
    resources :categories, :only => [:show], :constraints => {:format => /(json|xml)/}
    

    If this doesn't work you could try explicitly matching the action:

    resources :categories, :except => [:show]
    match 'categories/:id.:format' => 'categories#show', :constraints => {:format => /(json|xml)/}
    
    0 讨论(0)
  • 2020-12-23 20:50

    I found that this seemed to work (thanks to @Pan for pointing me in the right direction):

    resources :categories, :except => [:show]
    resources :categories, :only => [:show], :defaults => { :format => 'json' }
    

    The above seems to force the router into serving a format-less request, to the show action, as json by default.

    0 讨论(0)
  • 2020-12-23 20:50

    constraints was not working for POST requests and then I tried defaults it works for all.

    namespace :api, :defaults => { :format => 'json' } do
        namespace :v1 do
          resources :users do
            collection do
              get 'profile'
            end
          end
          post 'signup' => 'users#create'
          post 'login' => 'user_sessions#create'
      end
    end
    

    I was using Rails 4.2.7

    0 讨论(0)
提交回复
热议问题