Ruby Academy · Oppitunti

Controllerit ja toiminnot

Käsittele pyyntöjä.

Oppitunti 2/413 vaihetta

Controllerit ja toiminnot on ilmainen Ruby Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Ruby Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Ruby Academy-kurssilla on yhteensä 4 oppituntia.

Mikä controller on?

Controller vastaanottaa pyynnön reitittimeltä, suorittaa tarvittavat toimet ja päättää, mitä palautetaan. Se toimii mallien ja näkymien välisenä koordinaattorina.

  • Controllerit sijaitsevat hakemistossa app/controllers.
  • Ne perivät luokan ApplicationController.
  • Jokainen julkinen metodi on action.

Controllerin määrittäminen

Controller on luokka, jonka nimi päättyy sanaan Controller. Käytännön mukaan ArticlesController käsittelee articles-resurssin reittejä.

class ArticlesController < ApplicationController
  def index
    @articles = Article.all
  end
end

Actionit yhdistyvät reitteihin

Jokainen seitsemästä REST-reitistä kutsuu vastaavaa actionia. Reititin ohjaa pyynnön GET /articles actioniin index, pyynnön GET /articles/1 actioniin show ja niin edelleen. Kun actionien nimet vastaavat käytäntöä, kaikki yhdistyy automaattisesti.

params-hash

Pyynnön tiedot saapuvat params-muuttujaan, joka on hashia muistuttava olio ja sisältää reitin osat, kyselymerkkijonat sekä lomakekentät. Polussa /articles/5 params[:id] on "5".

def show
  @article = Article.find(params[:id])
end

Instanssimuuttujat näkymiin

Controllerit välittävät tietoja näkymille instanssimuuttujien avulla eli käyttämällä @-etuliitettä. Kaikki actionissa asetetut @variable-muuttujat ovat käytettävissä vastaavassa näkymämallissa.

def index
  @articles = Article.all
  # @articles is available in index.html.erb
end

index- ja show-actionien toteuttaminen

Lukutoiminnot ovat yksinkertaisia: index lataa kokoelman ja show lataa yhden tietueen tunnisteen perusteella. Sen jälkeen ne renderöivät oletusmallinsa.

class ArticlesController < ApplicationController
  def index
    @articles = Article.all
  end

  def show
    @article = Article.find(params[:id])
  end
end

create-actionin toteuttaminen

create-action muodostaa tietueen lähetetyistä tiedoista ja tallentaa sen. Onnistumisen jälkeen se uudelleenohjaa käyttäjän, ja epäonnistuessaan renderöi lomakkeen uudelleen, jotta käyttäjä voi korjata virheet.

def create
  @article = Article.new(article_params)
  if @article.save
    redirect_to @article
  else
    render :new, status: :unprocessable_entity
  end
end

redirect_to vs render

Kaksi hyvin erilaista vastausta:

  • redirect_to käskee selainta tekemään uuden pyynnön toiseen URL-osoitteeseen.
  • render palauttaa näkymän suoraan nykyistä pyyntöä varten.

Uudelleenohjaa onnistuneen kirjoitustoiminnon jälkeen ja renderöi lomake uudelleen, kun haluat näyttää sen virheineen.

Ennen actioneita suoritettavat toiminnot

before_action suorittaa yhteiset valmistelut ennen valittuja actioneita, mikä vähentää toisteista koodia. Yleinen käyttötapaus on ladata tietue, jota tarvitaan actioneissa show, edit, update ja destroy.

class ArticlesController < ApplicationController
  before_action :set_article, only: [:show, :edit, :update, :destroy]

  private

  def set_article
    @article = Article.find(params[:id])
  end
end

Suodattimet ja todennus

before_action voi myös valvoa sääntöjä. Suojauksen kaltainen määritys before_action :require_login voi suorittaa komennon redirect_to login_path ja keskeyttää actionin, jos käyttäjä ei ole kirjautunut sisään. Näin kokonaisia controllereita voidaan suojata kerralla.

before_action :require_login

private

def require_login
  redirect_to login_path unless current_user
end

Puuttuvien tietueiden käsittely

Kun find ei löydä tietuetta, se nostaa virheen RecordNotFound, jonka Rails muuntaa tuotannossa 404-vastaukseksi. Voit mukauttaa tätä komennolla rescue_from ja näyttää käyttäjäystävällisen sivun.

rescue_from ActiveRecord::RecordNotFound do
  redirect_to articles_path, alert: "Not found"
end

Pikatesti

Testaa, miten hyvin ymmärrät controllerit.

Kertaus: controllerit ja actionit

Opit, miten controllerit käsittelevät pyyntöjä:

  • Actionit yhdistyvät reitteihin käytännön mukaisesti.
  • params sisältää pyynnön tiedot, ja @variables-muuttujat välittyvät näkymään.
  • create tallentaa ja sitten uudelleenohjaa käyttäjän tai renderöi näkymän uudelleen.
  • redirect_to ja render palvelevat eri tarkoituksia.
  • before_action jakaa yhteiset valmistelut ja valvoo todennusta.

Seuraavaksi pidämme mass assignment -toiminnon turvallisena vahvojen parametrien avulla.

Aloita maksutta

Opi Ruby tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
29
Oppitunnit
109

Usein kysytyt kysymykset

Onko oppitunti ”Controllerit ja toiminnot” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Ruby Academy-oppimispolun 3 oppituntia, myös oppitunnin “Controllerit ja toiminnot”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Ruby Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Controllerit ja toiminnot”?

Käsittele pyyntöjä. Harjoittelet Ruby Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Ruby Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Ruby Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Controllerit ja toiminnot”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Ruby Academy-oppitunnilla?

Kyllä. Jokainen Ruby Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Reitit ja resurssit
  2. Controllerit ja toiminnot
  3. Vahvat parametrit
  4. Näkymät ja renderöinti
← Takaisin: Ruby Academy