0Pricing
Ruby Academy · Lekcja

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
end

Akcje 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])
end

Zmienne 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
end

Implementowanie 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
end

Implementowanie 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
end

redirect_to a render

Dwie zupełnie różne odpowiedzi:

  • redirect_to informuje przeglądarkę, aby wysłała nowe żądanie do innego adresu URL.
  • render zwraca 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
end

Filtry 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
end

Obsł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"
end

Szybki 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ą.
  • params przenosi dane żądania, a @variables trafiają do widoku.
  • create zapisuje dane, a następnie przekierowuje użytkownika lub ponownie renderuje widok.
  • redirect_to i render służą do różnych celów.
  • before_action współ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

  1. Trasy i zasoby
  2. Kontrolery i akcje
  3. Silne parametry
  4. Widoki i renderowanie
← Powrót do Ruby Academy