Parametri delle rotaie spiegate?

Qualcuno potrebbe spiegare i params nel controller Rails: da dove provengono e a cosa si riferiscono?

  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 

Mi piacerebbe poter leggere questo codice riga per riga e capire cosa sta succedendo.

I parametri provengono dal browser dell’utente quando richiedono la pagina. Per una richiesta HTTP GET, che è la più comune, i parametri sono codificati nell’URL. Ad esempio, se è richiesto il browser di un utente

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

allora params[:foo] sarebbe “1” e params[:boo] sarebbe “octopus”.

In HTTP / HTML, i param sono in realtà solo una serie di coppie chiave-valore in cui la chiave e il valore sono stringhe, ma Ruby on Rails ha una syntax speciale per rendere i parametri un hash con hash all’interno. Ad esempio, se è richiesto il browser dell’utente

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

quindi params[:vote] sarebbe un hash, params[:vote][:item_id] sarebbe “1” e params[:vote][:user_id] sarebbe “2”.

I parametri di Ruby on Rails sono l’equivalente dell’array $ _REQUEST in PHP .

Come altri hanno sottolineato, params valori params possono provenire dalla stringa di query di una richiesta GET, o dai dati del modulo di una richiesta POST, ma c’è anche un terzo posto da cui possono provenire: Il percorso dell’URL.

Come forse saprai, Rails usa qualcosa chiamato route per indirizzare le richieste alle azioni corrispondenti del controller. Questi percorsi possono contenere segmenti estratti dall’URL e inseriti in params . Ad esempio, se hai un percorso come questo:

 match 'products/:id', ... 

Quindi una richiesta a un URL come http://example.com/products/42 imposterà params[:id] a 42 .

Params contiene i seguenti tre gruppi di parametri:

  1. Parametri forniti dall’utente
    • GET ( http://domain.com/url?param1=value1&param2=value2 imposterà params [: param1] e params [: param2])
    • POST (es. JSON, XML verrà automaticamente analizzato e memorizzato in parametri)
    • Nota: per impostazione predefinita, Rails duplica i parametri forniti dall’utente e li memorizza in parametri [: utente] se in UsersController, può essere modificato con l’impostazione wrap_parameters
  2. Parametri di instradamento
    • match '/user/:id' in routes.rb imposterà params [: id]
  3. Parametri di default
    • params[:controller] e params[:action] sono sempre disponibili e contengono il controller e l’azione attuali

Fondamentalmente, i parametri sono dati specificati dall’utente nell’applicazione rails.

Quando si registra un modulo, lo si fa generalmente con la richiesta POST anziché con la richiesta GET. Puoi pensare a richieste di guide normali come richieste GET, quando navighi nel sito, se ti aiuta.

Quando si invia un modulo, il controllo viene restituito all’applicazione. Come ottieni i valori che hai inviato al modulo? params è come.

Informazioni sul tuo codice. @vote = Vote.new params[:vote] crea un nuovo Vote to database usando i dati di params [: vote]. Dato il tuo modulo utente inviato è stato nominato sotto il nome: voto, tutti i dati sono in questo: campo di voto dell’hash.

Le prossime due righe vengono utilizzate per ottenere l’elemento e l’utente uid ha inviato al modulo.

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

trova l’ultimo, o l’ultimo inserito, voto dal database con le condizioni item_id = item e user_id = uid.

Le righe successive richiedono l’ultima votazione e l’ora corrente.

Sul lato Rails, params è un metodo che restituisce un object ActionController::Parameters . Vedi https://stackoverflow.com/a/44070358/5462485