Rails params explicó?

¿Alguien podría explicar los params en el controlador de 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 poder leer este código línea por línea y entender qué está pasando.

Los parámetros provienen del navegador del usuario cuando solicitan 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 se solicita el navegador de un usuario

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

entonces params[:foo] sería “1” y params[:boo] sería “pulpo”.

En HTTP / HTML, los params son en realidad solo una serie de pares clave-valor donde la clave y el valor son cadenas, pero Ruby on Rails tiene una syntax especial para hacer que los params sean un hash con hash dentro. Por ejemplo, si el navegador del usuario solicitó

http://www.example.com/?vote%5Bitem_id%5D=1&vote%5Buser_id%5D=2

entonces params[:vote] sería un hash, params[:vote][:item_id] sería “1” y params[:vote][:user_id] sería “2”.

Los parametros de Ruby on Rails son el equivalente de la matriz $ _REQUEST en PHP .

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

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

 match 'products/:id', ... 

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

Params contiene los siguientes tres grupos de parámetros:

  1. Parámetros proporcionados por el usuario
    • GET ( http://domain.com/url?param1=value1&param2=value2 configurará params [: param1] y params [: param2])
    • POST (por ejemplo, JSON, XML se analizará automáticamente y se almacenará en parámetros)
    • Nota: de forma predeterminada, Rails duplica los parámetros proporcionados por el usuario y los almacena en params [: user] si en UsersController, se pueden cambiar con la configuración wrap_parameters
  2. Parámetros de enrutamiento
    • match '/user/:id' en routes.rb configurará params [: id]
  3. Parámetros predeterminados
    • params[:controller] y params[:action] siempre están disponibles y contienen el controlador y la acción actuales

Básicamente, los parámetros son datos especificados por el usuario a la aplicación de Rails.

Cuando publica un formulario, generalmente lo hace con solicitud POST en lugar de solicitud GET. Puede pensar solicitudes de Rails normales como solicitudes GET, cuando navega por el sitio, si esto ayuda.

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

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

Las siguientes dos líneas se usan para obtener el artículo y el usuario de usuario ha enviado el formulario.

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

encuentra el voto más nuevo o último insertado de la base de datos con condiciones item_id = item y user_id = uid.

Las siguientes líneas toman el último tiempo de votación y la hora actual.

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