Rails params explained?


¿Alguien podría explicar params en el controlador Rails: de dónde vienen y a qué se refieren?

  def create
    @vote = Vote.new(params[:vote])
    item = params[:vote][:item_id]
    uid = params[:vote][:user_id]
    @extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])
    last_vote_time = @extant.created_at unless @extant.blank?
    curr_time = Time.now
  end

Me gustaría ser capaz de leer este código línea por línea y entender lo que está pasando.

Author: tereško, 2011-07-31

5 answers

Los parámetros provienen del navegador del usuario cuando solicita la página. Para una solicitud HTTP GET, que es la más común, los parámetros están codificados en la url. Por ejemplo, si el navegador de un usuario solicita

Http://www.example.com/?foo=1&boo=octopus

Entonces params[:foo] sería "1" y params[:boo] sería "el pulpo".

En HTTP / HTML, los parámetros son realmente solo una serie de pares clave-valor donde la clave y el valor son cadenas, pero Ruby on Rails tiene una sintaxis especial para hacer que los parámetros sean un hash con hashes dentro. Por ejemplo, si el navegador del usuario solicita

Http://www.example.com/?vote [item_id] = 1 & vote[user_id]=2

Entonces params[:vote] sería un hash, params[:vote][:item_id] sería "1" y params[:vote][:user_id] sería "2".

Los parámetros de Ruby on Rails son el equivalente del array $_REQUEST en PHP.

 254
Author: David Grayson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-11 00:15:08

Como otros han señalado, params los valores pueden venir de la cadena de consulta de una solicitud GET, o los datos de formulario de una solicitud POST, pero también hay un tercer lugar del que pueden venir: La ruta de la URL.

Como sabrás, Rails usa algo llamado routes para dirigir las peticiones a sus correspondientes acciones de controlador. Estas rutas pueden contener segmentos que se extraen de la URL y se colocan en params. Por ejemplo, si tienes una ruta como esta:

match 'products/:id', ...

Luego una solicitud para una URL como http://example.com/products/42 establecerá params[:id] a 42.

 71
Author: hammar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-30 22:20:20

Params contiene los siguientes tres grupos de parámetros:

  1. Parámetros suministrados por el usuario
    • OBTENER (http://domain.com/url?param1=value1&param2=value2 establecerá params[:param1] y params[:param2])
    • POST (por ejemplo, JSON, XML se analizará automáticamente y se almacenará en parámetros)
    • Nota: Por defecto, Rails duplica los parámetros suministrados por el usuario y los almacena en params [: user] si en UsersController, puede ser cambiado con wrap_parameters ajuste
  2. Parámetros de enrutamiento
    • match '/user/:id' en rutas.rb establecerá parámetros [: id]
  3. Parámetros por defecto
    • params[:controller] y params[:action] está siempre disponible y contiene el controlador actual y la acción
 45
Author: thejaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-01 14:55:00

Básicamente, los parámetros son datos especificados por el usuario para la aplicación rails.

Cuando publicas un formulario, generalmente lo haces con POST request en lugar de GET request. Puedes pensar las peticiones rails normales como peticiones GET, cuando navegas por el sitio, si te ayuda.

Cuando envía un formulario, el control se devuelve a la solicitud. ¿Cómo obtiene los valores que ha enviado al formulario? params es cómo.

Acerca de su código. @vote = Vote.new params[:vote] crea un nuevo voto a la base de datos utilizando datos de params [: vote]. Dado que el usuario del formulario enviado fue nombrado bajo nombre: voto, todos los datos del mismo están en este campo :voto del hash.

Las siguientes dos líneas se utilizan para obtener el elemento y el usuario uid ha enviado al formulario.

@extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])

Encuentra el voto más reciente, o el último insertado, de la base de datos con las condiciones item_id = item y user_id = uid.

Las líneas siguientes toman la hora del último voto y la hora actual.

 13
Author: Smar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-17 20:34:27

En el lado de Rails, params es un método que devuelve un objeto ActionController::Parameters. Véase https://stackoverflow.com/a/44070358/5462485

 3
Author: Margotte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-06 15:18:39