2011-07-30 12 views
203

Ktoś może wyjaśnić params w kontrolerze Rails: skąd pochodzą i do czego się odnoszą?Wyjaśniono parametry Railsów?

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 

Chciałbym móc czytać ten kod po linii i rozumiem, co się dzieje.

+2

Jakie jest Twoje doświadczenie w tworzeniu stron WWW po stronie serwera? Jakie technologie już znasz? –

+3

Jestem z HTML i CSS od lat. Zrobiłem klasy, które używały PHP, JS i Java. Użyto bardzo mało MVC z php. Nauczyłem się programowania w Javie. Dokładnie rozumiem teorię baz danych. – Dru

Odpowiedz

251

Parametry pochodzą z przeglądarki użytkownika podczas żądania strony. W przypadku żądania HTTP GET, które jest najbardziej powszechne, parametry są zakodowane w adresie URL. Na przykład, jeśli przeglądarka użytkownika o

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

następnie params[:foo] będzie „1” i params[:boo] byłoby „ośmiornicy”.

W HTTP/HTML, parametry są w rzeczywistości serią par klucz-wartość, gdzie klucz i wartość są łańcuchami, ale Ruby on Rails ma specjalną składnię, która sprawia, że ​​parametry są hashami z hasłami w środku. Na przykład, jeśli przeglądarka użytkownika o

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

następnie params[:vote] byłoby hash, params[:vote][:item_id] będzie "1" i params[:vote][:user_id] będzie "2".

Parametry Ruby on Rails są odpowiednikiem $_REQUEST array in PHP.

+11

Odpowiednik $ _REQUEST oprócz tego, że $ _REQUEST zawiera dane get, post i cookie, podczas gdy parametry pobierają i publikują dane. – Parziphal

+3

Dane @ ethoco POST są również zawarte w haszu Rails 'params'. Dane cookie są zawarte w hash 'session'. –

+0

Ta odpowiedź pozostawia jedno inne źródło parametrów: adres URL. Zobacz odpowiedź hammar, aby uzyskać więcej informacji. –

13

Zasadniczo parametry są danymi użytkownika dla aplikacji szyn.

Kiedy piszesz formularz, robisz to z reguły za pomocą żądania POST, w przeciwieństwie do żądania GET. Możesz myśleć o normalnych żądaniach szyn jako żądaniach GET, kiedy przeglądasz stronę, jeśli to pomaga.

Po przesłaniu formularza kontrola jest przesyłana z powrotem do aplikacji. W jaki sposób otrzymujesz wartości, które przesłałeś do formularza? params jest jak.

O swoim kodzie. @vote = Vote.new params[:vote] tworzy nowe Głosowanie do bazy danych przy użyciu danych params [: głosuj]. Biorąc pod uwagę, że przesłany formularz użytkownika został nazwany pod nazwą: głosuj, wszystkie jego dane znajdują się w polu: głosuj z hashem.

Następne dwa wiersze służą do pobrania elementu i użytkownika uid do formularza.

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

wyszukuje najnowsze lub ostatnio wstawione głosowanie z bazy danych z warunkami item_id = item i user_id = uid.

Następne wiersze dotyczą czasu ostatniego głosowania i bieżącego czasu.

70

Jak inni podkreślili, wartości params mogą pochodzić z łańcucha zapytań żądania GET lub danych formularza żądania POST, ale istnieje również trzecie miejsce, z którego mogą pochodzić: Ścieżka adresu URL.

Jak wiadomo, Railsy używają nazwanych tras do kierowania żądań do ich odpowiednich działań kontrolera. Te trasy mogą zawierać segmenty wyodrębnione z adresu URL i umieszczone w params.Na przykład, jeśli masz trasy tak:

match 'products/:id', ... 

Następnie wniosek do adresu URL jak http://example.com/products/42 ustawi params[:id] do 42.

43

Params zawiera następujące trzy grupy parametrów:

  1. użytkownika zestaw parametrów
    • GET (http://domain.com/url?param1=value1&param2=value2 będzie wyznaczać params [: param1] i params [: Param2])
    • POST (np. JSON, XML będzie automatycznie analizowany i zapisywany w parametrach)
    • Uwaga: domyślnie Rails powiela parametry dostarczane przez użytkownika i zapisuje je w params [: użytkownika], jeżeli w UsersController, można zmienić ustawienie wrap_parameters
  2. Routing Parametry
    • match '/user/:id'w trasach. RB ustawi params [id]
  3. parametry domyślne
    • params[:controller] i params[:action] jest zawsze dostępny i zawiera aktualną kontroler oraz akcję
+1

Czy możesz jeszcze bardziej rozwinąć notatkę w sekcji "Parametry dostarczone przez użytkownika"? Przykładem może być przykład skrótu params w kontrolce UsersController. Twój przykład sprawia, że ​​brzmi to tak, jakby hasz wyglądał jak: '{first_name:" mike ", user: {first_name:" mike "} ...}' Czy to prawda? – 7stud

+0

@ 7stud To prawda! – thejaz

+1

Nie widzę tego w rails4.Na przykład '{" _method "=>" put "," authenticity_token "=>" gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI = "," ripe "=>" true "," action "=>" update "," controller "=>" apples " , "id" => "4"} '. Wybacz mi, jeśli się mylę, jestem początkującym trenem. Zgodnie z twoją uwagą powinienem zobaczyć: '{" _method "=>" put "," authenticity_token "=>" gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI = "," ripe "=>" true "," apple "=> {" ripe "=> "true"}, "action" => "update", "controller" => "apples", "id" => "4"} 'Nie wiem, czy to ma coś wspólnego z _stronnymi parametrami_ w szynach4 czy nie . – 7stud

Powiązane problemy