Rails params wyjaśnione?
Czy ktoś mógłby wyjaśnić params
w Rails controller: skąd pochodzą i do czego się odnoszą?
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 być w stanie odczytać ten kod linia po linii i zrozumieć, co się dzieje.
5 answers
Paramy pochodzą z przeglądarki użytkownika, gdy żąda strony. W przypadku żądania HTTP GET, które jest najczęstsze, paramy są zakodowane w adresie url. Na przykład, jeśli przeglądarka użytkownika zażądała
Http://www.example.com/?foo=1&boo=octopus
Wtedy params[:foo]
będzie "1 "i params[:boo]
będzie "ośmiornica".
W HTTP/HTML, params są tak naprawdę tylko serią par klucz-wartość, gdzie klucz i wartość są ciągami znaków, ale Ruby on Rails ma specjalną składnię dla dokonywanie params być hash z hashami w środku. Na przykład, jeśli przeglądarka użytkownika zażądała
Http://www.example.com/?vote[item_id] = 1 & głosuj[user_id]=2
Wtedy params[:vote]
będzie skrótem, params[:vote][:item_id]
będzie "1", A params[:vote][:user_id]
będzie "2".
Paramy Ruby on Rails są odpowiednikiem tablicy $_REQUEST w PHP .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-11 00:15:08
Jak zauważyli inni, params
wartości mogą pochodzić z ciągu zapytania żądania GET lub danych formularza żądania POST, ale jest też trzecie miejsce, z którego mogą pochodzić: ścieżka adresu URL.
Jak zapewne wiesz, Rails używa czegoś, co nazywa się routes, aby kierować żądania do odpowiednich akcji kontrolera. Trasy te mogą zawierać segmenty, które są wyodrębniane z adresu URL i umieszczane w params
. Na przykład, jeśli masz taką trasę:
match 'products/:id', ...
Następnie Prośba o adres URL taki jak {[3] } ustawi params[:id]
na 42
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-30 22:20:20
Params zawiera następujące trzy grupy parametrów:
-
parametry dostarczone przez Użytkownika
- GET (http://domain.com/url?param1=value1¶m2=value2 ustawia params[:param1] i params [: param2]) JSON, XML będzie automatycznie przetwarzany i przechowywany w params)
- Uwaga: Domyślnie Rails duplikuje podane przez użytkownika parametry i przechowuje je w params[:user] jeśli w UsersController, może be changed with wrap_parameters setting
-
parametry routingu
-
match '/user/:id'
w trasach.rb ustawia params [: id]
-
-
domyślne parametry
-
params[:controller]
i {[2] } jest zawsze dostępne i zawiera bieżący kontroler oraz akcję
-
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-01 14:55:00
W zasadzie, parametry są danymi podanymi przez użytkownika do aplikacji rails.
Kiedy publikujesz formularz, robisz to zazwyczaj za pomocą żądania POST, a nie żądania GET. Możesz myśleć o zwykłych żądaniach rails jako o żądaniach GET, kiedy przeglądasz witrynę, jeśli to pomoże.
Po przesłaniu formularza kontrola jest zwracana do aplikacji. Jak uzyskać wartości przesłane do formularza? params
jest jak.
@vote = Vote.new params[:vote]
tworzy nowe głosowanie do bazy danych przy użyciu danych z params [: głosuj]. Biorąc pod uwagę, że użytkownik przesłanego formularza został nazwany pod nazwą: vote, wszystkie jego dane znajdują się w polu :vote hasha.
Następne dwie linie są używane do pobierania item i UID użytkownika przesłanego do formularza.
@extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])
Wyszukuje najnowszy lub ostatnio dodany głos z bazy danych o warunkach item_id = item i user_id = uid.
Następna linia zajmuje ostatni czas głosowania i bieżący czas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-17 20:34:27
Po stronie Rails, {[0] } jest metodą, która zwraca obiekt ActionController::Parameters
.
Zobacz https://stackoverflow.com/a/44070358/5462485
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-06 15:18:39