1 Atnaujinimas į Rails 5.1
Jei atnaujinote esamą programą, gerai būtų turėti gerą testavimo padengimą prieš pradedant. Taip pat pirmiausia turėtumėte atnaujinti iki Rails 5.0, jei dar to nepadarėte, ir įsitikinti, kad jūsų programa veikia kaip tikėtasi, prieš bandant atnaujinti į Rails 5.1. Atnaujinimo metu reikėtų atkreipti dėmesį į keletą dalykų, kuriuos galima rasti Ruby on Rails atnaujinimo vadove.
2 Pagrindinės funkcijos
2.1 Yarn palaikymas
Rails 5.1 leidžia valdyti JavaScript priklausomybes iš npm per Yarn. Tai leis lengvai naudoti bibliotekas kaip React, VueJS ar bet kurią kitą biblioteką iš npm pasaulio. Yarn palaikymas yra integruotas su turinio paleidimo sistema, todėl visos priklausomybės veiks sklandžiai su Rails 5.1 programa.
2.2 Neprivalomas Webpack palaikymas
Rails programos gali lengviau integruotis su Webpack, JavaScript turinio paleidimo įrankiu, naudojant naują Webpacker juostą. Generuojant naujas programas, galima naudoti --webpack
vėliavą, kad įgalintumėte Webpack integraciją.
Tai yra visiškai suderinama su turinio paleidimo sistema, kurią galite toliau naudoti vaizdams, šriftams, garsams ir kitam turiniui. Galite netgi turėti tam tikrą JavaScript kodą, valdomą turinio paleidimo sistema, ir kitą kodą, apdorojamą per Webpack. Visa tai valdo Yarn, kuris yra įjungtas pagal numatytuosius nustatymus.
2.3 jQuery nebėra numatytasis priklausomybė
Anksčiau versijose jQuery buvo reikalaujama pagal numatytuosius nustatymus, kad būtų galima naudoti funkcijas kaip data-remote
, data-confirm
ir kitas Rails "Unobtrusive JavaScript" paslaugas. Dabar tai nebėra būtina, nes UJS buvo perrašytas naudojant paprastą, natūralųjį JavaScript. Šis kodas dabar yra įtrauktas į Action View kaip rails-ujs
.
Jei reikia, vis tiek galite naudoti jQuery, tačiau jis nebėra numatytasis.
2.4 Sistemos testai
Rails 5.1 turi įdiegtą palaikymą rašyti Capybara testus, naudojant Sistemos testus. Jums nebėra reikalinga rūpintis Capybara ir duomenų bazės valymo strategijomis šiems testams. Rails 5.1 teikia apvalkalą testams paleisti „Chrome“ naršyklėje su papildomomis funkcijomis, pvz., nesėkmės ekranų nuotraukos.
2.5 Užšifruoti paslaptys
Rails dabar leidžia tvarkyti programos paslaptis saugiu būdu, inspiruotas sekrets grotelės.
Paleiskite bin/rails secrets:setup
, kad sukurtumėte naują užšifruotų paslapčių failą. Tai
taip pat sugeneruos pagrindinį raktą, kuris turi būti saugomas už repozitorijos ribų.
Patys paslapčių gali būti saugiai įtraukti į versijų kontrolės sistemą,
užšifruota forma.
Paslapčios bus iššifruojamos veikimo metu, naudojant raktą, saugomą arba
RAILS_MASTER_KEY
aplinkos kintamajame, arba raktų faile.
2.6 Parametrizuoti laiškai
Leidžia nurodyti bendrus parametrus, naudojamus visiems metodams laiškų klasėje, kad būtų galima dalintis objektų kintamaisiais, antraštimais ir kitais bendrais nustatymais.
class InvitationsMailer < ApplicationMailer
before_action { @inviter, @invitee = params[:inviter], params[:invitee] }
before_action { @account = params[:inviter].account }
def account_invitation
mail subject: "#{@inviter.name} pakvietė jus į savo Basecamp (#{@account.name})"
end
end
InvitationsMailer.with(inviter: person_a, invitee: person_b)
.account_invitation.deliver_later
2.7 Tiesioginiai ir išsprendžiami maršrutai
Rails 5.1 prideda dvi naujas metodus, resolve
ir direct
, maršrutizavimo
DSL. resolve
metodas leidžia tinkinti modelių polimorfinį atvaizdavimą.
resource :basket
resolve("Basket") { [:basket] }
<%= form_for @basket do |form| %>
<!-- krepšelio forma -->
<% end %>
Tai sugeneruos vienintelį URL /basket
vietoj įprasto /baskets/:id
.
direct
metodas leidžia kurti tinkintus URL pagalbininkus.
direct(:homepage) { "https://rubyonrails.org" }
homepage_url # => "https://rubyonrails.org"
Bloko grąžinimo reikšmė turi būti tinkama argumentui url_for
metodui. Taigi, galite perduoti tinkamą eilutės URL, Hash, masyvą,
aktyvaus modelio objektą arba aktyvaus modelio klasę.
direct :commentable do |model|
[ model, anchor: model.dom_id ]
end
direct :main do
{ controller: 'pages', action: 'index', subdomain: 'www' }
end
2.8 form_for ir form_tag sujungimas į form_with
Iki Rails 5.1 buvo du sąsajos HTML formų tvarkymui:
form_for
modelio instancijoms ir form_tag
pasirinktoms URL.
Rails 5.1 sujungia šias sąsajas su form_with
ir
gali generuoti formos žymes pagal URL, ribas ar modelius.
Naudojant tik URL:
<%= form_with url: posts_path do |form| %>
<%= form.text_field :title %>
<% end %>
<%# Sugeneruos %>
<form action="/posts" method="post" data-remote="true">
<input type="text" name="title">
</form>
Pridedant ribą, įvesties laukų pavadinimai bus prefiksuoti:
<%= form_with scope: :post, url: posts_path do |form| %>
<%= form.text_field :title %>
<% end %>
<%# Sugeneruos %>
<form action="/posts" method="post" data-remote="true">
<input type="text" name="post[title]">
</form>
Naudojant modelį, URL ir riba bus nustatomi automatiškai:
<%= form_with model: Post.new do |form| %>
<%= form.text_field :title %>
<% end %>
<%# Sugeneruos %>
<form action="/posts" method="post" data-remote="true">
<input type="text" name="post[title]">
</form>
Esamas modelis sukuria atnaujinimo formą ir užpildo laukų reikšmes:
<%= form_with model: Post.first do |form| %>
<%= form.text_field :title %>
<% end %>
<%# Sugeneruos %>
<form action="/posts/1" method="post" data-remote="true">
<input type="hidden" name="_method" value="patch">
<input type="text" name="post[title]" value="<the title of the post>">
</form>
3 Nesuderinamumai
Šie pakeitimai gali reikalauti nedelsiant veiksmo po atnaujinimo.
3.1 Transakciniai testai su keliais ryšiais
Transakciniai testai dabar apgaubia visas Active Record ryšius duomenų bazėje.
Kai testas sukuria papildomus gijas ir šios gijos gauna duomenų bazės ryšius, šie ryšiai dabar yra tvarkomi specialiai:
Gijos bendrai naudoja vieną ryšį, kuris yra valdomoje transakcijoje. Tai užtikrina, kad visos gijos matytų duomenų bazę toje pačioje būsenoje, ignoruojant išorinę transakciją. Anksčiau tokiems papildomiems ryšiams buvo neįmanoma matyti pavyzdinių eilučių, pavyzdžiui.
Kai gija patenka į vidinę transakciją, ji laikinai gauna ekskluzyvų ryšio naudojimą, kad būtų išlaikyta izoliacija.
Jei jūsų testai dabar priklauso nuo atskiro, nebūtinai transakcijos, ryšio gijoje, turėsite perjungti į aiškesnį ryšio valdymą.
Jei jūsų testai sukuria gijas ir šios gijos sąveikauja, naudodamos aiškias duomenų bazės transakcijas, šis pakeitimas gali sukelti užstrigimus. Paprastas būdas išjungti šį naują elgesį yra išjungti transakcinius testus visuose testavimo atvejuose, kuriuos tai veikia.
4 Railties
Išsamius pakeitimus žr. Changelog.
4.1 Pašalinimai
Pašalintas pasenusi
config.static_cache_control
. (commit)Pašalintas pasenusi
config.serve_static_files
. (commit)Pašalintas pasenusi failas
rails/rack/debugger
. (commit)Pašalintos pasenusios užduotys:
rails:update
,rails:template
,rails:template:copy
,rails:update:configs
irrails:update:bin
. (commit)Pašalinta pasenusi
CONTROLLER
aplinkos kintamojiroutes
užduočiai. (commit)Pašalinta -j (--javascript) parinktis iš
rails new
komandos. (Pull Request)
4.2 Svarbūs pakeitimai
Pridėta bendra sekcija
config/secrets.yml
, kuri bus įkrauta visiems aplinkoms. (commit)Konfigūracijos failas
config/secrets.yml
dabar įkeliamas su visais raktų simboliais. (Pull Request)Pašalintas jquery-rails iš numatytosios eilės. rails-ujs, kuris yra pristatomas su Action View, įtrauktas kaip numatytasis UJS adapteris. (Pull Request)
Pridėta Yarn palaikymas naujose programose su yarn binstub ir package.json. (Pull Request)
Pridėtas Webpack palaikymas naujose programose naudojant
--webpack
parinktį, kuri deleguos į rails/webpacker gemą. (Pull Request)Sukuriamas Git saugykla, kai generuojama nauja programa, jei nenurodyta
--skip-git
parinktis. (Pull Request)Pridėti užšifruoti paslaptys
config/secrets.yml.enc
. (Pull Request)Rodyti railtie klasės pavadinimą
rails initializers
. (Pull Request)
5 Action Cable
Išsamius pakeitimus žr. Changelog.
5.1 Svarbūs pakeitimai
Pridėta palaikymas
channel_prefix
Redis ir evented Redis adapteriamscable.yml
, kad išvengtumėte pavadinimų susidūrimų naudojant tą patį Redis serverį su keliais taikomaisiais. (Pull Request)Pridėtas
ActiveSupport::Notifications
kabliuko transliavimo duomenims. (Pull Request)
6 Action Pack
Išsamius pakeitimus žr. Changelog.
6.1 Pašalinimai
Pašalintas nepalaikomas parametrų perduodimo būdas
#process
,#get
,#post
,#patch
,#put
,#delete
ir#head
metodamsActionDispatch::IntegrationTest
irActionController::TestCase
klasėse. (Commit, Commit)Pašalintas pasenusių
ActionDispatch::Callbacks.to_prepare
irActionDispatch::Callbacks.to_cleanup
palaikymas. (Commit)Pašalinti pasenusių metodų, susijusių su valdiklio filtrų, palaikymas. (Commit)
Pašalintas pasenusių
:text
ir:nothing
parametrų palaikymasrender
. (Commit, Commit)Pašalintas pasenusi palaikymas
HashWithIndifferentAccess
metodams, kviečiant juos išActionController::Parameters
. (Commit)
6.2 Pasenusių funkcijų pažymėjimai
- Pažymėtas pasenusi
config.action_controller.raise_on_unfiltered_parameters
. Tai neturi jokio poveikio „Rails 5.1“. (Commit)
6.3 Svarbūs pakeitimai
- Pridėti
direct
irresolve
metodai maršrutojimo DSL. (Pull Request) - Pridėta nauja
ActionDispatch::SystemTestCase
klasė, skirta rašyti sistemos testus jūsų programose. (Pull Request)
7 Action View
Išsamius pakeitimus žiūrėkite Changelog.
7.1 Pašalinimai
Pašalintas pasenusių
#original_exception
metodasActionView::Template::Error
klasėje. (commit)Pašalinta
encode_special_chars
klaidingai pavadinta parinktis išstrip_tags
metodo. (Pull Request)
7.2 Pasenusi funkcionalumas
- Pasenęs Erubis ERB tvarkytuvas pakeistas naudojant Erubi. (Pull Request)
7.3 Svarbūs pakeitimai
Šiukšlių šablonų tvarkytuvas (numatytasis šablonų tvarkytuvas „Rails 5“) dabar išveda saugius HTML tekstus. (commit)
Pakeistas
datetime_field
irdatetime_field_tag
generuojantdatetime-local
laukus. (Pull Request)Naujas „Builder“ stiliaus sintaksės variantas HTML žymėms (
tag.div
,tag.br
, ir kt.). (Pull Request)Pridėtas
form_with
metodas, vienijantisform_tag
irform_for
naudojimą. (Pull Request)Pridėta
check_parameters
parinktiscurrent_page?
metode. (Pull Request)
8 Action Mailer
Išsamius pakeitimus žiūrėkite Changelog.
8.1 Svarbūs pakeitimai
Leidžiama nustatyti pasirinktinį turinio tipą, kai yra pridedami priedai ir kūnas nustatomas tiesiogiai. (Pull Request)
Leidžiama perduoti lambda funkcijas kaip reikšmes
default
metode. (Commit)Pridėta parametrizuota kvietimo mailer'iams palaikymo galimybė, kad būtų galima bendrinti prieš filtrus ir numatytuosius nustatymus tarp skirtingų mailer'io veiksmų. (Commit)
Įvykio
process.action_mailer
metode įeinantys argumentai perduodami mailer'io veiksmui poargs
raktazodžio. (Pull Request)
9 Active Record
Išsamius pakeitimus žiūrėkite Changelog.
9.1 Pašalinimai
Pašalinta parametrų ir bloko perdavimo palaikymo galimybė
ActiveRecord::QueryMethods#select
metode. (Commit)Pašalintos pasenusios
activerecord.errors.messages.restrict_dependent_destroy.one
iractiverecord.errors.messages.restrict_dependent_destroy.many
i18n sritys. (Commit)Pašalintas pasenusios jėgos perkrovos argumentas vienam ir kolekcijos asociacijų skaitytuvams. (Commit)
Pašalinta palaikymo galimybė perduoti stulpelį į
#quote
metodą. (Commit)Pašalintas
name
argumentas iš#tables
metodo. (Commit)Pašalintas
#tables
ir#table_exists?
metodų pasenusi elgsena, grąžinanti tik lentas, o ne vaizdus. (Commit)Pašalintas pasenusių
original_exception
argumentas išActiveRecord::StatementInvalid#initialize
irActiveRecord::StatementInvalid#original_exception
metodų. (Commit)Pašalinta palaikymo galimybė perduoti klasę kaip reikšmę užklausai. (Commit)
Pašalinta palaikymo galimybė užklausti naudojant kablelius LIMIT'e. (Commit)
Pašalintas
conditions
parametras iš#destroy_all
metodo. (Commit)Pašalintas
conditions
parametras iš#delete_all
metodo. (Commit)Pašalintas
#load_schema_for
metodas, naudoti#load_schema
metodą. (Commit)Pašalinta
#raise_in_transactional_callbacks
konfigūracija. (Commit)Pašalinta pasenusi
#use_transactional_fixtures
konfigūracija. (Commit)
9.2 Pasenusi funkcionalumas
Pasenęs
error_on_ignored_order_or_limit
vėliavėlė, naudotierror_on_ignored_order
vietoje. (Commit)Pasenęs
sanitize_conditions
, naudotisanitize_sql
vietoje. (Pull Request)Pasenęs
supports_migrations?
jungties adapteriuose. (Pull Request)Pasenęs
Migrator.schema_migrations_table_name
, naudotiSchemaMigration.table_name
vietoje. (Pull Request)Pasenęs
#quoted_id
naudojimas citavime ir tipo keitime. (Pull Request)Pasenęs
default
argumento perdavimas į#index_name_exists?
. (Pull Request)
9.3 Svarbūs pakeitimai
Pakeistas numatytasis pirminis raktas į BIGINT. (Pull Request)
Pridėta palaikymas virtualiems/sugeneruotiems stulpeliams MySQL 5.7.5+ ir MariaDB 5.2.0+. (Commit)
Pridėtas palaikymas limitams masinio apdorojimo metu. (Commit)
Transakciniai testai dabar apgaubia visus Active Record ryšius duomenų bazėje. (Pull Request)
Pagal nutylėjimą praleidžiami komentarai
mysqldump
komandos rezultatuose. (Pull Request)Ištaisytas
ActiveRecord::Relation#count
, kad būtų naudojamas RubyEnumerable#count
metodas įrašams skaičiuoti, kai perduodamas blokas kaip argumentas, o ne tyliai ignoruojamas perduotas blokas. (Pull Request)Pridėtas
"-v ON_ERROR_STOP=1"
vėliavėlė supsql
komanda, kad nebūtų slopinami SQL klaidos. (Pull Request)Pridėtas
ActiveRecord::Base.connection_pool.stat
. (Pull Request)Klaida iškelia, kai tiesiogiai paveldima iš
ActiveRecord::Migration
. Nurodykite Rails versiją, kuriai migracija buvo parašyta. (Commit)Klaida iškelia, kai
through
asociacija turi dviprasmišką atspindį. (Commit)
10 Active Model
Išsamūs pakeitimai pateikti Changelog faile.
10.1 Pašalinimai
Pašalinti pasenusi metodai
ActiveModel::Errors
. (commit)Pašalinta pasenusi
:tokenizer
parinktis ilgio tikrintuve. (commit)Pašalintas pasenusi elgsenos, kai nutraukiamos atgalinės iškvietimų grandinės, kai grąžinimo reikšmė yra false. (commit)
10.2 Svarbūs pakeitimai
- Originalus modelio atributui priskirtas tekstas dabar neteisingai nešaldomas. (Pull Request)
11 Active Job
Išsamūs pakeitimai pateikti Changelog faile.
11.1 Pašalinimai
Pašalinta pasenusi palaikymo galimybė perduoti adapterio klasę į
.queue_adapter
. (commit)Pašalinta pasenusi
#original_exception
ActiveJob::DeserializationError
. (commit)
11.2 Svarbūs pakeitimai
Pridėtas deklaratyvus išimčių valdymas per
ActiveJob::Base.retry_on
irActiveJob::Base.discard_on
. (Pull Request)Perduodamas darbo pavyzdys, kad būtų galima pasiekti dalykus, pvz.,
job.arguments
, po pasikartojimų nepavykusios papildomos logikos metu. (commit)
12 Active Support
Išsamūs pakeitimai pateikti Changelog faile.
12.1 Pašalinimai
Pašalinta
ActiveSupport::Concurrency::Latch
klasė. (Commit)Pašalintas
halt_callback_chains_on_return_false
. (Commit)Pašalintas pasenusi elgsena, kuri stabdo atgalinius kvietimus, kai grąžinama false. (Įsipareigojimas)
12.2 Pasenusių funkcijų pašalinimas
Viršutinio lygio
HashWithIndifferentAccess
klasė buvo švelniai pasenusi, naudojantActiveSupport::HashWithIndifferentAccess
klasę. (Pasiūlymas)Pasenusi eilutės perdavimas
:if
ir:unless
sąlyginėms parinktimsset_callback
irskip_callback
. (Įsipareigojimas)
12.3 Svarbūs pakeitimai
Ištaisytas trukmės analizavimas ir kelionė, kad būtų išlaikytas nuoseklumas per DST pakeitimus. (Įsipareigojimas, Pasiūlymas)
Atnaujintas Unicode iki 9.0.0 versijos. (Pasiūlymas)
Pridėtos
Duration#before
ir#after
kaip sinonimaiago
irsince
. (Pasiūlymas)Pridėtas
Module#delegate_missing_to
metodas, kuris perduoda metodo kvietimus, kurie nėra apibrėžti dabartiniam objektui, į peržiūros objektą. (Pasiūlymas)Pridėtas
Date#all_day
metodas, kuris grąžina intervalą, atitinkantį visą dabartinės datos ir laiko dieną. (Pasiūlymas)Įvesti
assert_changes
irassert_no_changes
metodai testams. (Pasiūlymas)travel
irtravel_to
metodai dabar iškeliauja į klaidą dėl įdėtų kvietimų. (Pasiūlymas)Atnaujintas
DateTime#change
metodas, kad būtų palaikomiusec
irnsec
. (Pasiūlymas)
13 Autoriai
Peržiūrėkite pilną sąrašą asmenų, prisidėjusių prie Rails, kurie daug valandų skyrė kurti Rails, stabilų ir patikimą karkasą. Pagarba visiems jiems.
Atsiliepimai
Jūs esate skatinami padėti pagerinti šio vadovo kokybę.
Prašome prisidėti, jei pastebite rašybos klaidų ar faktinių klaidų. Norėdami pradėti, galite perskaityti mūsų dokumentacijos prisidėjimo skyrių.
Taip pat gali būti nepilnos informacijos arba informacijos, kuri nėra atnaujinta. Prašome pridėti bet kokią trūkstamą dokumentaciją pagrindiniam. Patikrinkite Edge vadovus pirmiausia, ar problemas jau išspręsta arba ne pagrindinėje šakoje. Patikrinkite Ruby on Rails vadovų gaires dėl stiliaus ir konvencijų.
Jei dėl kokios nors priežasties pastebite kažką, ką reikia ištaisyti, bet negalite patys tai pataisyti, prašome pranešti apie problemą.
Ir galiausiai, bet ne mažiau svarbu, bet koks diskusijos dėl Ruby on Rails dokumentacijos yra labai laukiamos oficialiame Ruby on Rails forume.