Controllerit ja toiminnot
Käsittele pyyntöjä.
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
endActionit 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])
endInstanssimuuttujat 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
endindex- 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
endcreate-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
endredirect_to vs render
Kaksi hyvin erilaista vastausta:
redirect_tokäskee selainta tekemään uuden pyynnön toiseen URL-osoitteeseen.renderpalauttaa 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
endSuodattimet 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
endPuuttuvien 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"
endPikatesti
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.
paramssisältää pyynnön tiedot, ja@variables-muuttujat välittyvät näkymään.createtallentaa ja sitten uudelleenohjaa käyttäjän tai renderöi näkymän uudelleen.redirect_tojarenderpalvelevat eri tarkoituksia.before_actionjakaa yhteiset valmistelut ja valvoo todennusta.
Seuraavaksi pidämme mass assignment -toiminnon turvallisena vahvojen parametrien avulla.
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
- Reitit ja resurssit
- Controllerit ja toiminnot
- Vahvat parametrit
- Näkymät ja renderöinti