2011-04-07 15 views

Respuesta

60

¿Puede verificar si se trataba de una publicación mediante request.post?

if request.post? 
    #handle posts 
else 
    #handle gets 
end 

para obtener sus rutas a trabajar:

resources :photos do 
    member do 
    get 'preview' 
    post 'preview' 
    end 
end 
+1

Perdón por desenterrar esto pero - ¿está compartiendo la misma ruta para dos verbos de alguna manera una mala práctica? –

+1

Creo que puede ser. O puede indicar que su diseño es un poco pobre – Ven

+0

@FelipeAlmeida IMO no es una mala práctica si se usa cuando tiene sentido hacerlo. – Dennis

5

Ésta es otra manera. Incluí un código de ejemplo para responder con 405 para los métodos no admitidos y mostrar los métodos compatibles cuando se utiliza el método OPTIONS en la URL.

En app/controllers/foo/bar_controller.rb

before_action :verify_request_type 

def my_action 
    case request.method_symbol 
    when :get 
    ... 
    when :post 
    ... 
    when :patch 
    ... 
    when :options 
    # Header will contain a comma-separated list of methods that are supported for the resource. 
    headers['Access-Control-Allow-Methods'] = allowed_methods.map { |sym| sym.to_s.upcase }.join(', ') 
    head :ok 
    end 
end 

private 

def verify_request_type 
    unless allowed_methods.include?(request.method_symbol) 
    head :method_not_allowed # 405 
    end 
end 

def allowed_methods 
    %i(get post patch options) 
end 

En config/routes.rb

match '/foo/bar', to: 'foo/bar#my_action', via: :all 
+1

La parte de rutas me ayudó a configurar las cosas como las quería. ¡Gracias! – mjnissim

2

sólo tiene que utilizar esto, utilizar sólo GET y POST en la misma ruta

resources :articles do 
    member do 
    match 'action_do-you_want', via: [:get, :post] 
    end 
end 
0

puede probar esta

match '/posts/multiple_action', to: 'posts#multiple_action', via: [:create, :patch, :get, :options] 
Cuestiones relacionadas