Kontrolery i akcje
Obsługa żądań
Kontrolery i akcje to bezpłatna lekcja Ruby Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Ruby Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Ruby Academy zawiera 4 lekcji w sumie.
Czym jest kontroler
Kontroler odbiera żądanie od routera, wykonuje odpowiednie działania i decyduje, co odesłać. Koordynuje współpracę modeli z widokami.
- Kontrolery znajdują się w
app/controllers. - Dziedziczą po
ApplicationController. - Każda publiczna metoda jest akcją.
Definiowanie kontrolera
Kontroler jest klasą, której nazwa kończy się na Controller. Zgodnie z konwencją ArticlesController obsługuje trasy zasobu articles.
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
endAkcje odpowiadają trasom
Każda z siedmiu tras REST wywołuje odpowiadającą jej akcję. Router przekazuje GET /articles do index, GET /articles/1 do show i tak dalej. Nazywanie akcji zgodnie z konwencją pozwala automatycznie połączyć wszystkie elementy.
Hash params
Dane żądania trafiają do params, obiektu podobnego do hasha, który zawiera segmenty trasy, parametry zapytania i pola formularza. Dla ścieżki /articles/5 wartość params[:id] to "5".
def show
@article = Article.find(params[:id])
endZmienne instancji w widokach
Kontrolery przekazują dane do widoków za pomocą zmiennych instancji (z prefiksem @). Każda zmienna @variable ustawiona w akcji jest widoczna w odpowiadającym jej szablonie widoku.
def index
@articles = Article.all
# @articles is available in index.html.erb
endImplementowanie index i show
Akcje odczytu są proste: index ładuje kolekcję, a show ładuje jeden rekord na podstawie identyfikatora. Następnie renderują swoje domyślne szablony.
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
def show
@article = Article.find(params[:id])
end
endImplementowanie create
Akcja create tworzy rekord na podstawie przesłanych danych i zapisuje go. W razie powodzenia przekierowuje użytkownika, a w razie niepowodzenia ponownie renderuje formularz, aby można było poprawić błędy.
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render :new, status: :unprocessable_entity
end
endredirect_to a render
Dwie zupełnie różne odpowiedzi:
redirect_toinformuje przeglądarkę, aby wysłała nowe żądanie do innego adresu URL.renderzwraca widok bezpośrednio w ramach bieżącego żądania.
Po pomyślnym zapisie należy przekierować użytkownika, a za pomocą renderowania ponownie wyświetlić formularz z błędami.
Akcje before_action
before_action wykonuje wspólną konfigurację przed wybranymi akcjami, ograniczając powielanie kodu. Często służy do załadowania rekordu potrzebnego w akcjach show, edit, update i destroy.
class ArticlesController < ApplicationController
before_action :set_article, only: [:show, :edit, :update, :destroy]
private
def set_article
@article = Article.find(params[:id])
end
endFiltry i uwierzytelnianie
before_action może również wymuszać określone reguły. Strażnik taki jak before_action :require_login może wykonać redirect_to login_path i zatrzymać akcję, jeśli użytkownik nie jest zalogowany, chroniąc od razu całe kontrolery.
before_action :require_login
private
def require_login
redirect_to login_path unless current_user
endObsługa brakujących rekordów
Gdy find nie może znaleźć rekordu, zgłasza RecordNotFound, które Rails zamienia w środowisku produkcyjnym na błąd 404. Za pomocą rescue_from można dostosować to zachowanie i wyświetlić przyjazną stronę.
rescue_from ActiveRecord::RecordNotFound do
redirect_to articles_path, alert: "Not found"
endSzybki test
Proszę sprawdzić, czy rozumieją Państwo kontrolery.
Podsumowanie: kontrolery i akcje
Poznali Państwo sposób, w jaki kontrolery obsługują żądania:
- Akcje są przypisywane do tras zgodnie z konwencją.
paramsprzenosi dane żądania, a@variablestrafiają do widoku.createzapisuje dane, a następnie przekierowuje użytkownika lub ponownie renderuje widok.redirect_toirendersłużą do różnych celów.before_actionwspółdzieli konfigurację i wymusza uwierzytelnianie.
Następnie zadbamy o bezpieczeństwo masowego przypisywania za pomocą strong parameters.
Często zadawane pytania
Czy lekcja „Kontrolery i akcje” jest bezpłatna?
Tak — pełny tekst „Kontrolery i akcje” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Ruby Academy, przejdź na CoddyKit PRO. Kurs Ruby Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Kontrolery i akcje”?
Obsługa żądań Ćwiczysz Ruby Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Ruby Academy?
Nie wymagamy żadnego doświadczenia. Ruby Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Kontrolery i akcje”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Ruby Academy?
Tak. Każda lekcja Ruby Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Trasy i zasoby
- Kontrolery i akcje
- Silne parametry
- Widoki i renderowanie