¿Podría alguien 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 poder leer este código línea por línea y comprender lo que está sucediendo.
ruby-on-rails
ruby
Dru
fuente
fuente
Respuestas:
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 el navegador de un usuario solicita
http://www.example.com/?foo=1&boo=octopus
entonces
params[:foo]
sería "1" yparams[:boo]
sería "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 solicitó
http://www.example.com/?vote[item_idfont>=1&vote[user_idfont>=2
entonces
params[:vote]
sería un hash,params[:vote][:item_id]
sería "1" yparams[:vote][:user_id]
sería "2".Los parámetros de Ruby on Rails son el equivalente de la matriz $ _REQUEST en PHP .
fuente
params
hash de Rails . Los datos de cookies se incluyen en elsession
hash.Como otros han señalado, los
params
valores pueden provenir de la cadena de consulta de una solicitud GET o de los datos del formulario de una solicitud POST, pero también hay un tercer lugar del que pueden provenir: la ruta de la URL.Como sabrás, Rails usa algo llamado rutas para dirigir las solicitudes a sus acciones de controlador correspondientes. Estas rutas pueden contener segmentos que se extraen de la URL y se colocan en
params
. Por ejemplo, si tiene una ruta como esta:A continuación, una petición a una URL como
http://example.com/products/42
conjunto voluntadparams[:id]
a42
.fuente
Params contiene los siguientes tres grupos de parámetros:
match '/user/:id'
en routes.rb establecerá los parámetros [: id]params[:controller]
yparams[:action]
siempre está disponible y contiene el controlador y la acción actualesfuente
User supplied parameters
un poco más? Por ejemplo, un ejemplo del hash de params en el UsersController sería útil. Su ejemplo hace que parezca que el hash se verá así:{first_name: "mike", user: {first_name: "mike"} ...}
¿Es correcto?{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "action"=>"update", "controller"=>"apples", "id"=>"4"}
. Perdóname si me equivoco, soy un principiante de rieles. Según su nota, debería ver:{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "apple" => {"ripe"=>"true"}, "action"=>"update", "controller"=>"apples", "id"=>"4"}
no sé si eso tiene que ver con parámetros fuertes en rails4 o no.Básicamente, los parámetros son datos especificados por el usuario para la aplicación rails.
Cuando publica un formulario, generalmente lo hace con la solicitud POST en lugar de la solicitud GET. Puede pensar que las solicitudes de rieles normales son solicitudes GET, cuando navega por el sitio, si es útil.
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.Sobre tu código.
@vote = Vote.new params[:vote]
crea una nueva base de datos Vote to utilizando datos de parámetros [: vote]. Dado que su formulario enviado por el usuario fue nombrado con el nombre: vote, todos los datos se encuentran en este: campo de votación del hash.Las siguientes dos líneas se utilizan para obtener el elemento y el usuario uid lo ha enviado al formulario.
encuentra el voto más nuevo o el último insertado de la base de datos con las condiciones item_id = item y user_id = uid.
Las siguientes líneas toman el tiempo de la última votación y la hora actual.
fuente
En el lado de Rails,
params
es un método que devuelve unActionController::Parameters
objeto. Ver https://stackoverflow.com/a/44070358/5462485fuente
params
es un método. Ruby puede dificultar la distinción de variables de métodos