simple rails gema formularios form for buscador association anidados ruby-on-rails

gema - Identificar los parámetros GET y POST en Ruby on Rails



rails formularios anidados (11)

¿Cuál es la forma más sencilla de identificar y separar los parámetros GET y POST de un controlador en Ruby on Rails, que será equivalente a las variables $ _GET y $ _POST en PHP?


Creo que lo que quieres hacer no es muy "Rails", si sabes a qué me refiero. Sus solicitudes GET deben ser idempotentes : debería poder emitir la misma solicitud GET muchas veces y obtener el mismo resultado cada vez.


No conozco ningún método de conveniencia en Rails para esto, pero puede acceder directamente a la cadena de consulta para analizar los parámetros que allí se establecen. Algo como lo siguiente:

request.query_string.split(/&/).inject({}) do |hash, setting| key, val = setting.split(/=/) hash[key.to_sym] = val hash end


No necesita saber ese nivel de detalle en el controlador. Sus rutas y formularios harán que se agreguen los elementos adecuados al hash de parámetros. Luego, en el controlador solo tienes que acceder a decir params[:foo] para obtener el parámetro foo y hacer lo que necesites con él.

El mapeo entre GET y POST (y PUT y DELETE) y las acciones del controlador se configura en config/routes.rb en el código de Rails más moderno.


Si desea verificar el tipo de solicitud para evitar hacer algo cuando se usa el método incorrecto, tenga en cuenta que también puede especificarlo en su archivo routes.rb:

map.connect ''/posts/:post_id'', :controller => ''posts'', :action => ''update'', :conditions => {:method => :post}

o

map.resources :posts, :conditions => {:method => :post}

El método de actualización de su PostsController ahora solo se invocará cuando tenga efectivamente una publicación. Consulte el documento de recursos .


Hay una diferencia entre los parámetros GET y POST. Una solicitud POST HTTP aún puede tener parámetros GET.

Los parámetros GET son parámetros de consulta de URL.

Los parámetros POST son parámetros en el cuerpo de la solicitud HTTP.

puede acceder a estos por separado de los hashes request.GET y request.POST.


Hay tres accesadores hash muy poco documentados en el objeto de solicitud para esto:

  • request.query_parameters : enviado como parte de la cadena de consulta, es decir, después de a?
  • request.path_parameters - decodificado desde la URL a través del enrutamiento, es decir, controller, action, id
  • request.request_parameters - Todos los parámetros, incluidos los anteriores y los enviados como parte del cuerpo POST

Puede utilizar Hash#reject para llegar a los parámetros POST-only según sea necesario.

Fuente: http://guides.rubyonrails.org/v2.3.8/action_controller_overview.html sección 9.1.1

Busqué en una vieja aplicación Rails 1.2.6 y estos accesorios también existían en aquel entonces.


Creo que lo que Jesse Reiss está hablando es una situación en la que en tu archivo routes.rb tienes

post ''ctrllr/:a/:b'' => ''ctrllr#an_action''

y POSTAS a valores de POST "/ ctrllr / foo / bar? a = not_foo" {''a'' => ''still_not_foo''} , tendrá tres valores diferentes de ''a'': ''foo'', ''not_foo'' y '' still_not_foo ''

''params'' en el controlador tendrá ''a'' en ''foo''. Para encontrar ''a'' en ''not_foo'' y ''still_not_foo'', debe examinar request.GET y request.POST

Escribí una joya que distingue entre estos diferentes pares clave => valor en https://github.com/pdxrod/routesfordummies .


if request.query_parameters().to_a.empty?



Puedes hacerlo usando:

request.POST

y

request.GET


request.get? devolverá boolean true si es método GET,

request.post? devolverá boolean true si es el método POST,