ruby - validar - rutas rest en rails
Rails 3-Restricción de formatos para la acción en las rutas de recursos (4)
Debe envolver esas rutas en un ámbito si desea restringirlas a un formato específico (por ejemplo, html o json). Restricciones desafortunadamente no funcionan como se esperaba en este caso.
Este es un ejemplo de tal bloque ...
scope :format => true, :constraints => { :format => ''json'' } do
get ''/bar'' => "bar#index_with_json"
end
Puede encontrar más información aquí: https://github.com/rails/rails/issues/5548
Esta respuesta está copiada de mi respuesta anterior aquí ..
Rutas de carriles: limitación de los formatos disponibles para un recurso
Tengo un recurso definido en mis rutas.
resources :categories
Y tengo lo siguiente en mi controlador de categoría:
def show
@category = Category.find(params[:id])
respond_to do |format|
format.json { render :json => @category }
format.xml { render :xml => @category }
end
end
La acción del controlador funciona bien para json y xml. Sin embargo, NO quiero que el controlador responda a las solicitudes de formato html. ¿Cómo solo puedo permitir json y xml? Esto solo debería ocurrir en la acción de mostrar.
¿Cuál es la mejor manera de lograr esto? ¿También hay algunos buenos consejos para SECAR el bloque responder_?
Gracias por tu ayuda.
Descubrí que esto parecía funcionar (gracias a @Pan por señalarme en la dirección correcta):
resources :categories, :except => [:show]
resources :categories, :only => [:show], :defaults => { :format => ''json'' }
Lo anterior parece forzar al enrutador a enviar una solicitud sin formato, a la acción de mostrar, como json de manera predeterminada.
Puede hacer lo siguiente en su archivo routes.rb para asegurarse de que solo la acción show esté restringida a json o xml:
resources :categories, :except => [:show]
resources :categories, :only => [:show], :constraints => {:format => /(json|xml)/}
Si esto no funciona, puede intentar asociar explícitamente la acción:
resources :categories, :except => [:show]
match ''categories/:id.:format'' => ''categories#show'', :constraints => {:format => /(json|xml)/}
constraints
no funcionaban para las solicitudes POST y luego probé los defaults
para todos.
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
Estaba usando Rails 4.2.7