Czy ktoś mógłby wyjaśnić params
w kontrolerze Railsów: skąd pochodzi i do czego się odnosi?
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 przeczytać ten kod wiersz po wierszu i zrozumieć, co się dzieje.
ruby-on-rails
ruby
Dru
źródło
źródło
Odpowiedzi:
Parametry pochodzą z przeglądarki użytkownika, gdy żąda strony. W przypadku żądania HTTP GET, które jest najczęściej, parametry są kodowane w adresie URL. Na przykład, jeśli zażądała przeglądarki użytkownika
http://www.example.com/?foo=1&boo=octopus
wtedy
params[:foo]
byłby „1” iparams[:boo]
byłby „ośmiornicą”.W HTTP / HTML parametry są tak naprawdę serią par klucz-wartość, w których klucz i wartość są łańcuchami, ale Ruby on Rails ma specjalną składnię, dzięki której parametry są skrótem z hashami w środku. Na przykład, jeśli zażądała tego przeglądarka użytkownika
http://www.example.com/?vote[item_id]=1&vote[user_id]=2
Następnie
params[:vote]
będzie mieszania,params[:vote][:item_id]
to jest „1” iparams[:vote][:user_id]
będzie „2”.Parametry Ruby on Rails są odpowiednikiem tablicy $ _REQUEST w PHP .
źródło
params
haszu Rails . Dane cookie są zawarte wsession
haszu.Jak zauważyli inni,
params
wartości mogą pochodzić z ciągu zapytania GET lub danych formularza żądania POST, ale jest też trzecie miejsce, z którego mogą pochodzić: ścieżka adresu URL.Jak zapewne wiesz, Railsy używają czegoś zwanego trasami do kierowania żądań do odpowiednich akcji kontrolera. Te trasy mogą zawierać segmenty wyodrębnione z adresu URL i umieszczone w nim
params
. Na przykład, jeśli masz taką trasę:Następnie żądanie adresu URL typu
http://example.com/products/42
zostanie ustawioneparams[:id]
na42
.źródło
Params zawiera następujące trzy grupy parametrów:
match '/user/:id'
w route.rb ustawi parametry [: id]params[:controller]
iparams[:action]
jest zawsze dostępny i zawiera bieżący kontroler i działanieźródło
User supplied parameters
nieco więcej? Na przykład pomocny byłby przykład skrótu params w UsersController. W twoim przykładzie brzmi to tak, jakby skrót wyglądał mniej więcej tak:{first_name: "mike", user: {first_name: "mike"} ...}
Czy to prawda?{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "action"=>"update", "controller"=>"apples", "id"=>"4"}
. Wybacz mi, jeśli się mylę, jestem początkującym torantem. Zgodnie z twoją notatką powinienem zobaczyć:{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "apple" => {"ripe"=>"true"}, "action"=>"update", "controller"=>"apples", "id"=>"4"}
nie wiem, czy ma to związek z silnymi parametrami w rails4, czy nie.Zasadniczo parametrami są określone przez użytkownika dane do aplikacji szynowej.
Kiedy publikujesz formularz, robisz to ogólnie z żądaniem POST, w przeciwieństwie do żądania GET. Podczas przeglądania witryny możesz myśleć o zwykłych żądaniach szynowych jako o żądaniach GET, jeśli to pomaga.
Po przesłaniu formularza kontrola jest zwracana do aplikacji. Jak uzyskać wartości przesłane do formularza?
params
pokazuje.O twoim kodzie.
@vote = Vote.new params[:vote]
tworzy nowe Głosowanie w bazie danych na podstawie danych parametrów [: głosowanie]. Biorąc pod uwagę, że przesłany przez Ciebie formularz został nazwany pod nazwą: głosuj, wszystkie jego dane znajdują się w polu: głosowanie skrótu.Kolejne dwa wiersze służą do pobrania elementu, a użytkownik UID przesłał formularz.
znajduje najnowszy lub ostatnio wstawiony głos z bazy danych z warunkami item_id = item i user_id = uid.
Kolejne wiersze zajmują czas ostatniego głosowania i aktualny czas.
źródło
Po stronie Railsów
params
jest to metoda zwracającaActionController::Parameters
obiekt. Zobacz https://stackoverflow.com/a/44070358/5462485źródło
params
jest to metoda. Ruby może utrudnić odróżnienie zmiennych od metod