edge
Daugiau informacijos rubyonrails.org: Daugiau apie Ruby on Rails

Ruby on Rails 5.1 Išleidimo pastabos

Svarbiausios naujovės Rails 5.1 versijoje:

Šiose išleidimo pastabose aptariamos tik pagrindinės naujovės. Norėdami sužinoti apie įvairius klaidų taisymus ir pakeitimus, prašome kreiptis į pakeitimų žurnalus arba peržiūrėti pakeitimų sąrašą pagrindiniame Rails saugykloje GitHub.

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

Pakeitimo užklausa

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

Pakeitimo užklausa

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ė

Pakeitimo užklausa

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

Pasiūlymas

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

Pasiūlymas

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

Pasiūlymas

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

Pasiūlymas

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

Pull Request

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 ir rails:update:bin. (commit)

  • Pašalinta pasenusi CONTROLLER aplinkos kintamoji routes 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 adapteriams cable.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 metodams ActionDispatch::IntegrationTest ir ActionController::TestCase klasėse. (Commit, Commit)

  • Pašalintas pasenusių ActionDispatch::Callbacks.to_prepare ir ActionDispatch::Callbacks.to_cleanup palaikymas. (Commit)

  • Pašalinti pasenusių metodų, susijusių su valdiklio filtrų, palaikymas. (Commit)

  • Pašalintas pasenusių :text ir :nothing parametrų palaikymas render. (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 ir resolve 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 metodas ActionView::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 ir datetime_field_tag generuojant datetime-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, vienijantis form_tag ir form_for naudojimą. (Pull Request)

  • Pridėta check_parameters parinktis current_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 po args 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 ir activerecord.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 ir ActiveRecord::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ė, naudoti error_on_ignored_order vietoje. (Commit)

  • Pasenęs sanitize_conditions, naudoti sanitize_sql vietoje. (Pull Request)

  • Pasenęs supports_migrations? jungties adapteriuose. (Pull Request)

  • Pasenęs Migrator.schema_migrations_table_name, naudoti SchemaMigration.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 Ruby Enumerable#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ė su psql 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 ir ActiveJob::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, naudojant ActiveSupport::HashWithIndifferentAccess klasę. (Pasiūlymas)

  • Pasenusi eilutės perdavimas :if ir :unless sąlyginėms parinktims set_callback ir skip_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 sinonimai ago ir since. (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 ir assert_no_changes metodai testams. (Pasiūlymas)

  • travel ir travel_to metodai dabar iškeliauja į klaidą dėl įdėtų kvietimų. (Pasiūlymas)

  • Atnaujintas DateTime#change metodas, kad būtų palaikomi usec ir nsec. (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.