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

Ruby on Rails 5.0 Išleidimo pastabos

Svarbiausi dalykai Rails 5.0 versijoje:

Šiose išleidimo pastabose aptariami tik pagrindiniai pokyčiai. Norėdami sužinoti apie įvairius klaidų taisymus ir pokyčius, prašome kreiptis į pakeitimų žurnalus arba peržiūrėti pakeitimų sąrašą pagrindiniame Rails saugykloje GitHub'e.

1 Atnaujinimas iki Rails 5.0

Jei atnaujinote esamą programą, gerai būtų turėti gerą testų padengimą prieš pradedant. Taip pat pirmiausia turėtumėte atnaujinti iki Rails 4.2, jei dar to nepadarėte, ir įsitikinti, kad jūsų programa vis dar veikia kaip tikimasi, prieš bandant atnaujinti iki Rails 5.0. Atnaujinimo metu reikėtų atkreipti dėmesį į keletą dalykų, kuriuos galima rasti Upgrading Ruby on Rails gide.

2 Pagrindinės funkcijos

2.1 Action Cable

Action Cable yra nauja Rails 5.0 versijoje. Ji be problemų integruoja WebSockets su jūsų Rails programa.

Action Cable leidžia rašyti realaus laiko funkcijas Ruby kalba taip pat, kaip ir visą kitą jūsų Rails programą, tuo pačiu būdama efektyvi ir plečiama. Tai yra visapusiškas sprendimas, kuris teikia tiek klientinės pusės JavaScript karkasą, tiek serverinės pusės Ruby karkasą. Jūs turite prieigą prie viso savo domeno modelio, kuris yra parašytas su Active Record arba jūsų pasirinktu ORM.

Daugiau informacijos rasite Action Cable apžvalgoje.

2.2 API programos

Rails dabar gali būti naudojamas kurti API programoms. Tai naudinga, jei norite kurti ir teikti API, panašius į Twitter ar GitHub API, kurie gali būti naudojami tiek viešai, tiek pritaikytoms programoms.

Galite sukurti naują api Rails programą naudodami:

$ rails new my_api --api

Tai padarys tris pagrindines veiklas:

  • Konfigūruos jūsų programą pradėti su mažesniu middleware rinkiniu nei įprasta. Konkrečiai, pagal numatytuosius nustatymus ji neįtrauks jokio middleware, kuris daugiausia naudojamas naršyklės programoms (pvz., slapukų palaikymas).
  • Padarys, kad ApplicationController paveldėtų ActionController::API, o ne ActionController::Base. Kaip ir su middleware, tai paliks bet kokius Action Controller modulius, kurie teikia funkcionalumą, daugiausia naudojamą naršyklės programoms.
  • Konfigūruos generatorius praleisti generuojant vaizdus, pagalbininkus ir išteklius, kai kuriate naują išteklių resursą. Ši programa teikia pagrindą API'ams, kurie gali būti konfigūruojami, kad įtrauktų funkcionalumą pagal programos poreikius.

Daugiau informacijos rasite Naudodami "Rails" tik API programoms vadove.

2.3 Active Record atributų API

Apibrėžia atributą su tipu modelyje. Jei reikia, jis perrašys esamų atributų tipą. Tai leidžia kontroliuoti, kaip reikšmės yra konvertuojamos į SQL ir atvirkščiai, kai priskiriamos modeliui. Tai taip pat keičia elgesį su reikšmėmis, perduotomis į ActiveRecord::Base.where, leidžiant naudoti mūsų domeno objektus daugelyje Active Record, nereikiant remtis įgyvendinimo detalėmis ar "monkey patching".

Kai kuriuos dalykus, kuriuos galima pasiekti:

  • Galima perrašyti Active Record aptiktą tipą.
  • Taip pat galima nurodyti numatytąją reikšmę.
  • Atributai gali neturėti duomenų bazės stulpelio.
# db/schema.rb
create_table :store_listings, force: true do |t|
  t.decimal :price_in_cents
  t.string :my_string, default: "original default"
end
# app/models/store_listing.rb
class StoreListing < ActiveRecord::Base
end
store_listing = StoreListing.new(price_in_cents: '10.1')

# prieš tai
store_listing.price_in_cents # => BigDecimal.new(10.1)
StoreListing.new.my_string # => "original default"

class StoreListing < ActiveRecord::Base
  attribute :price_in_cents, :integer # pasirinktinis tipas
  attribute :my_string, :string, default: "new default" # numatytoji reikšmė
  attribute :my_default_proc, :datetime, default: -> { Time.now } # numatytoji reikšmė
  attribute :field_without_db_column, :integer, array: true
end

# po to
store_listing.price_in_cents # => 10
StoreListing.new.my_string # => "new default"
StoreListing.new.my_default_proc # => 2015-05-30 11:04:48 -0600
model = StoreListing.new(field_without_db_column: ["1", "2", "3"])
model.attributes # => {field_without_db_column: [1, 2, 3]}

Kuriamas pasirinktinis tipas:

Galite apibrėžti savo pasirinktinius tipus, jei jie atitinka reikšmės tipo apibrėžtus metodus. Jūsų tipo objektui bus iškviestas metodas deserialize arba cast, su neapdorota duomenų bazės ar valdiklių įvestimi. Tai naudinga, pavyzdžiui, atliekant pasirinktinį konvertavimą, pvz., pinigų duomenims.

Užklausos:

Kai iškviečiama ActiveRecord::Base.where, ji naudos modelio klasėje apibrėžtą tipą, kad konvertuotų reikšmę į SQL, iškviesdama serialize jūsų tipo objekte.

Tai suteikia objektams galimybę nurodyti, kaip konvertuoti reikšmes vykdant SQL užklausas. Nešvarus stebėjimas:

Atributo tipas gali keisti, kaip vykdomas nešvarus stebėjimas.

Išsamią informaciją rasite dokumentacijoje.

2.4 Testavimo vykdytojas

Naujas testavimo vykdytojas buvo pristatytas, siekiant pagerinti galimybes vykdyti testus iš „Rails“. Norėdami naudoti šį testavimo vykdytoją, tiesiog įveskite bin/rails test.

Testavimo vykdytojas yra įkvėptas iš RSpec, minitest-reporters, maxitest ir kitų. Jis apima šiuos pastebimus patobulinimus:

  • Paleiskite vieną testą, naudodami testo eilės numerį.
  • Paleiskite kelis testus, nurodydami testų eilės numerį.
  • Gerinti klaidų pranešimus, kurie taip pat palengvina klaidingų testų pakartotiną vykdymą.
  • Greitai nutraukite naudojant -f parinktį, kad sustabdytumėte testus nedelsiant, kai atsiranda klaida, vietoj laukimo, kol bus baigtas visų testų rinkinys.
  • Atidėti testo rezultatų išvestį iki viso testų vykdymo pabaigos, naudojant -d parinktį.
  • Pilnas išimčių takelio išvestis naudojant -b parinktį.
  • Integruota su minitest, leidžianti naudoti parinktis, pvz., -s testavimo sėklos duomenims, -n paleisti konkretų testą pagal pavadinimą, -v geresnei išsamioms išvestims ir t.t.
  • Spalvota testavimo išvestis.

3 Railties

Išsamius pakeitimus žr. [Changelog][railties].

3.1 Pašalinimai

  • Pašalintas derinimo palaikymas, naudokite „byebug“. „debugger“ nepalaikomas Ruby 2.2. (commit)

  • Pašalintos pasenusios „test:all“ ir „test:all:db“ užduotys. (commit)

  • Pašalintas pasenusios „Rails::Rack::LogTailer“. (commit)

  • Pašalinta pasenusioji „RAILS_CACHE“ konstanta. (commit)

  • Pašalinta pasenusioji „serve_static_assets“ konfigūracija. (commit)

  • Pašalintos dokumentacijos užduotys „doc:app“, „doc:rails“ ir „doc:guides“. (commit)

  • Pašalintas „Rack::ContentLength“ tarpinė programinė įranga iš numatytosios eilės. (Commit)

3.2 Pasenusios funkcijos

  • Pasenusi „config.static_cache_control“, naudokite „config.public_file_server.headers“. (Pull Request)

  • Pasenusi „config.serve_static_files“, naudokite „config.public_file_server.enabled“. (Pull Request)

  • Pasenusios užduotys „rails“ užduočių srities vietoje „app“ srities. (pvz., „rails:update“ ir „rails:template“ užduotys pervadintos į „app:update“ ir „app:template“.) (Pull Request)

3.3 Pastebimi pakeitimai

  • Pridėtas „Rails“ testavimo vykdytojas bin/rails test. (Pull Request)

  • Naujai sukurtos programos ir įskiepiai gauna „README.md“ failą „Markdown“ formatu. (commit, Pull Request)

  • Pridėta „bin/rails restart“ užduotis, skirta paleisti „Rails“ programą palietus „tmp/restart.txt“. (Pull Request)

  • Pridėta „bin/rails initializers“ užduotis, skirta išspausdinti visus apibrėžtus pradinės būsenos nustatymus ta tvarka, kuria jie yra kviečiami „Rails“. (Pull Request)

  • Pridėtas bin/rails dev:cache komanda, leidžianti įjungti arba išjungti talpinimą vystymo režime. (Pull Request)

  • Pridėtas bin/update skriptas, skirtas automatiškai atnaujinti vystymo aplinką. (Pull Request)

  • Peradresuoti Rake užduotis per bin/rails. (Pull Request, Pull Request)

  • Naujos programos generuojamos su įvykių pagrindu failų stebėjimu įjungtu Linux ir macOS sistemose. Šią funkciją galima išjungti perduodant --skip-listen generatoriui. (commit, commit)

  • Generuojant programas, yra galimybė nurodyti, kad produkcijos režime žurnalas būtų išvedamas į STDOUT naudojant aplinkos kintamąjį RAILS_LOG_TO_STDOUT. (Pull Request)

  • Naujoms programoms įjungtas HSTS su IncludeSubdomains antraštė. (Pull Request)

  • Programos generatorius rašo naują failą config/spring.rb, kuris praneša Spring'ui stebėti papildomus bendrus failus. (commit)

  • Pridėtas --skip-action-mailer pasirinkimas, leidžiantis praleisti Action Mailer generuojant naują programą. (Pull Request)

  • Pašalintas tmp/sessions katalogas ir su juo susijusi aiškinamoji rake užduotis. (Pull Request)

  • Pakeistas scaffold generatoriaus sugeneruotas _form.html.erb failas, kad būtų naudojami vietiniai kintamieji. (Pull Request)

  • Išjungtas klasės automatinis įkėlimas produkcijos aplinkoje. (commit)

4 Action Pack

Išsamesnė informacija apie pakeitimus pateikiama [Changelog][action-pack] dokumente.

4.1 Pašalinimai

  • Pašalintas ActionDispatch::Request::Utils.deep_munge. (commit)

  • Pašalintas ActionController::HideActions. (Pull Request)

  • Pašalintos respond_to ir respond_with laikinosios metodų versijos, ši funkcionalumas buvo perkeltas į responders biblioteką. (commit)

  • Pašalintos pasenusios patikros failai. (commit)

  • Pašalintas pasenusias eilutes naudojimas URL pagalbininkuose. (commit)

  • Pašalintas pasenusias only_path parinktis *_path pagalbininkuose. (commit)

  • Pašalintas pasenusias NamedRouteCollection#helpers funkcionalumas. (commit)

  • Pašalintas pasenusias galimybė nurodyti maršrutus su :to parinktimi, kuri neapima #. (commit)

  • Pašalinta pasenusias ActionDispatch::Response#to_ary funkcionalumas. (commit)

  • Pašalinta pasenusias ActionDispatch::Request#deep_munge funkcionalumas. (commit)

  • Pašalinta pasenusias ActionDispatch::Http::Parameters#symbolized_path_parameters funkcionalumas. (commit)

  • Pašalinta pasenusias use_route parinktis valdiklio testuose. (commit)

  • Pašalinti assigns ir assert_template metodai. Abi funkcijos buvo perkeltos į rails-controller-testing biblioteką. (Pull Request)

4.2 Pasenusios funkcijos

  • Pasenusios visos *_filter atgalinio iškvietimo funkcijos, naudoti *_action atgalinio iškvietimo funkcijas. (Pull Request)

  • Pasenusios *_via_redirect integracinio testo metodai. Po užklausos iškvietimo, norint pasiekti tą patį elgesį, reikia naudoti follow_redirect! rankiniu būdu. (Pull Request)

  • Pasenusios AbstractController#skip_action_callback funkcijos, naudoti atskiras skip_callback metodus. (Pull Request)

  • Pasenusios :nothing parinktis render metode. (Pull Request)

  • Pasenusios pirmo parametro perdavimas kaip Hash ir numatytoji būsenos kodo reikšmė head metode. (Pull Request)

  • Pasenus naudoti eilutes arba simbolius kaip tarpinio klasės pavadinimus. Vietoj to naudokite klasės pavadinimus. (commit)

  • Pasenus pasiekti MIME tipus per konstantas (pvz., Mime::HTML). Vietoj to naudokite indeksavimo operatorių su simboliu (pvz., Mime[:html]). (Pull Request)

  • Pasenus redirect_to :back, naudokite redirect_back, kuris priima privalomą fallback_location argumentą, taip pašalindamas RedirectBackError galimybę. (Pull Request)

  • ActionDispatch::IntegrationTest ir ActionController::TestCase pasenusių pozicinių argumentų vietoje naudokite raktažodžių argumentus. (Pull Request)

  • Pasenusių :controller ir :action kelio parametrų. (Pull Request)

  • Pasenusas env metodas valdiklio egzemplioriuose. (commit)

  • ActionDispatch::ParamsParser pasenusi ir pašalinta iš tarpinio paketo. Norėdami konfigūruoti parametrų analizatorius, naudokite ActionDispatch::Request.parameter_parsers=. (commit, commit)

4.3 Svarbūs pakeitimai

  • Pridėtas ActionController::Renderer norint atvaizduoti bet kokius šablonus už valdiklio veiksmų ribų. (Pull Request)

  • Perėjimas prie raktažodžių argumentų sintaksės ActionController::TestCase ir ActionDispatch::Integration HTTP užklausos metodams. (Pull Request)

  • Pridėtas http_cache_forever prie Action Controller, kad galėtume talpinti atsakymą, kuris niekada nebaigiasi. (Pull Request)

  • Suteikta draugiškesnė prieiga prie užklausos variantų. (Pull Request)

  • Veiksmams be atitinkamų šablonų, vietoj klaidos iškėlimo, atvaizduojamas head :no_content. (Pull Request)

  • Pridėta galimybė perrašyti numatytąjį formos kūrėją valdikliui. (Pull Request)

  • Pridėta API tik programoms palaikymo galimybė. ActionController::API pridedama kaip ActionController::Base pakeitimas šios rūšies programoms. (Pull Request)

  • ActionController::Parameters daugiau neįgyvendina HashWithIndifferentAccess. (Pull Request)

  • Padaryta lengviau įjungti config.force_ssl ir config.ssl_options, padarant juos mažiau pavojingus ir lengviau išjungiamus. (Pull Request)

  • Pridėta galimybė grąžinti bet kokius antraščius į ActionDispatch::Static. (Pull Request)

  • Pakeistas protect_from_forgery pridėjimo numatytasis įjungimas į false. (commit)

  • ActionController::TestCase bus perkelta į savo paties juvelyrinę medžiagą „Rails“ 5.1 versijoje. Vietoj to naudokite ActionDispatch::IntegrationTest. (commit)

  • Pagal numatytuosius nustatymus „Rails“ generuoja silpnus ETag'us. (Pull Request)

  • Valdiklio veiksmai be aiškios render iškvietimo ir be atitinkamų šablonų vietoj klaidos iškėlimo automatiškai atvaizduojami head :no_content. (Pull Request 1, 2)

  • Pridėta paraiška dėl formos CSRF žetonų. (Pull Request)

  • Pridėtas užklausos kodavimas ir atsakymo analizė integracijos testams. (Pull Request)

  • Pridėtas ActionController#helpers, kad gautumėte prieigą prie vaizdo konteksto valdiklio lygyje. (Pull Request)

  • Atmestos "flash" pranešimai pašalinami prieš saugant į sesiją. (Pull Request)

  • Pridėta palaikymas perduoti įrašų kolekciją fresh_when ir stale?. (Pull Request)

  • ActionController::Live tapo ActiveSupport::Concern. Tai reiškia, kad jis negali būti tiesiog įtrauktas į kitus modulius be išplėtimo su ActiveSupport::Concern arba ActionController::Live neveiks produkcijoje. Kai kurie žmonės taip pat gali naudoti kitą modulį, kad įtrauktų tam tikrą Warden/Devise autentifikavimo nesėkmės tvarkymo kodą, nes tarpinės programinės įrangos negali užfiksuoti :warden, išmetamą išvesties gijos, kuri yra atvejis, naudojant ActionController::Live. (Daugiau informacijos šiame klausime)

  • Įvesti Response#strong_etag= ir #weak_etag= ir analogiški parametrai fresh_when ir stale?. (Pull Request)

5 Veiksmų rodinys

Išsamūs pakeitimai rasomi [Changelog][action-view].

5.1 Pašalinimai

  • Pašalintas pasenusių AbstractController::Base::parent_prefixes. (commit)

  • Pašalintas ActionView::Helpers::RecordTagHelper, ši funkcionalumas buvo išskirtas į record_tag_helper gemą. (Pull Request)

  • Pašalinta :rescue_format parinktis translate pagalbininkui, nes ji daugiau nepalaikoma I18n. (Pull Request)

5.2 Svarbūs pakeitimai

  • Pakeistas numatytasis šablonų tvarkyklė iš ERB į Raw. (commit)

  • Kolekcijos rodinys gali talpinti ir gauti kelis dalinius iš karto. (Pull Request, commit)

  • Pridėta ženklų atitikimo išplėstinėms priklausomybėms. (Pull Request)

  • disable_with tampa numatytuoju elgesiu pateikimo žymėms. Išjungia mygtuką pateikimo metu, kad būtų išvengta dvigubo pateikimo. (Pull Request)

  • Dalinio šablono pavadinimas nebūtinai turi būti galiojantis Ruby identifikatorius. (commit)

  • datetime_tag pagalbininkas dabar generuoja įvesties žymė su tipu datetime-local. (Pull Request)

  • Leidžiama naudoti blokus, renderinant su render partial: pagalbininku. (Pull Request)

6 Veiksmų paštas

Išsamūs pakeitimai rasomi [Changelog][action-mailer].

6.1 Pašalinimai

  • Pašalinti pasenusių *_path pagalbininkai el. pašto rodiniuose. (commit)

  • Pašalinti pasenusi deliver ir deliver! metodai. (commit)

6.2 Svarbūs pakeitimai

  • Šablonų paieška dabar atsižvelgia į numatytąją lokalę ir I18n atsarginius. (commit)

  • Pridėtas _mailer priesaga el. pašto rodiniams, sukurtiems per generatorių, laikantis to paties pavadinimo konvencijos, kuri naudojama kontroleriuose ir darbuose. (Pull Request)

  • Pridėti assert_enqueued_emails ir assert_no_enqueued_emails. (Pull Request)

  • Pridėta config.action_mailer.deliver_later_queue_name konfigūracija, nustatanti pašto eilės pavadinimą. (Pull Request)

  • Pridėtas fragmentų talpinimas veiksmų pašto rodiniuose. Pridėta nauja konfigūracijos parinktis config.action_mailer.perform_caching, nustatanti, ar šablonai turėtų atlikti talpinimą ar ne. (Pull Request)

    Aktyvusis įrašas

Išsamius pakeitimus rasite [Changelog][active-record].

6.3 Pašalinimai

  • Pašalinta pasenusi elgsena, leidžianti perduoti įdėtus masyvus kaip užklausos reikšmes. (Pull Request)

  • Pašalinta pasenusi ActiveRecord::Tasks::DatabaseTasks#load_schema funkcija. Ši funkcija buvo pakeista ActiveRecord::Tasks::DatabaseTasks#load_schema_for. (commit)

  • Pašalintas pasenusi serialized_attributes. (commit)

  • Pašalintas pasenusi automatinis skaitiklių kešavimas has_many :through. (commit)

  • Pašalinta pasenusi sanitize_sql_hash_for_conditions. (commit)

  • Pašalinta pasenusi Reflection#source_macro. (commit)

  • Pašalinti pasenusi symbolized_base_class ir symbolized_sti_name. (commit)

  • Pašalinta pasenusi ActiveRecord::Base.disable_implicit_join_references= funkcija. (commit)

  • Pašalintas pasenusi prisijungimo specifikacijos prieiga naudojant eilutės priėjimą. (commit)

  • Pašalintas pasenusi palaikymas išankstiniam įkėlimui priklausomų asociacijų. (commit)

  • Pašalintas pasenusi palaikymas PostgreSQL intervalams su ekskliuzyviais apatiniais ribomis. (commit)

  • Pašalinta pasenusi klaidos išmetimo funkcija keičiant ryšį su kešuotu Arel. Vietoj to kyla ImmutableRelation klaida. (commit)

  • Pašalintas ActiveRecord::Serialization::XmlSerializer iš pagrindinio kodo. Ši funkcija buvo išskirta į activemodel-serializers-xml paketą. (Pull Request)

  • Pašalintas palaikymas senam mysql duomenų bazės adapteriui iš pagrindinio kodo. Dauguma vartotojų turėtų galėti naudoti mysql2. Jis bus konvertuotas į atskirą paketą, kai rasime kas jį prižiūrėtų. (Pull Request 1, Pull Request 2)

  • Pašalintas palaikymas protected_attributes paketui. (commit)

  • Pašalintas palaikymas PostgreSQL versijoms žemesnėms nei 9.1. (Pull Request)

  • Pašalintas palaikymas activerecord-deprecated_finders paketui. (commit)

  • Pašalinta ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES konstanta. (commit)

6.4 Pasenusios funkcijos

  • Paseninta klasės perduodamo kaip reikšmės užklausoje funkcionalumas. Vartotojai turėtų perduoti eilutes vietoj to. (Pull Request)

  • Paseninta false grąžinimas kaip būdas sustabdyti Active Record atgalinį iškvietimų grandinę. Rekomenduojamas būdas yra throw(:abort). (Pull Request)

  • Paseninta ActiveRecord::Base.errors_in_transactional_callbacks= funkcija. (commit)

  • Paseninta Relation#uniq funkcija, naudokite Relation#distinct vietoj to. (commit)

  • Pasenintas PostgreSQL :point tipas naudai naujo, kuris grąžins Point objektus vietoj Array. (Pull Request)

  • Pasenintas asociacijos perkrovimas perduodant teisingą argumentą asociacijos funkcijai. (Pull Request)

  • Paseninti asociacijos restrict_dependent_destroy klaidų raktai naudai naujų raktų pavadinimų. (Pull Request)

  • Sinchronizuota #tables funkcijos elgsena. (Pull Request)

  • Pasenintos SchemaCache#tables, SchemaCache#table_exists? ir SchemaCache#clear_table_cache! funkcijos naudai jų naujų duomenų šaltinių atitikmenims. (Pull Request)

  • Paseninta connection.tables funkcija SQLite3 ir MySQL adapteriuose. (Pull Request)

  • Pasenus argumentus į #tables metodą pažymėta kaip pasenusią - kai kurie adapterių (mysql2, sqlite3) #tables metodas grąžindavo tiek lentelės, tiek vaizdus, tuo tarpu kiti (postgresql) grąžindavo tik lentelės. Norint padaryti jų veikimą nuosekliu, ateityje #tables grąžins tik lentelės. (Pull Request)

  • Pasenusią table_exists? metodą - #table_exists? metodas tikrino tiek lentelės, tiek vaizdus. Norint padaryti jų veikimą nuosekliu su #tables, ateityje #table_exists? tikrins tik lentelės. (Pull Request)

  • Pasenusią offset argumento perdavimą į find_nth. Prašome naudoti offset metodą vietoje. (Pull Request)

  • Pasenusius {insert|update|delete}_sql metodus DatabaseStatements. Vietoje jų naudokite {insert|update|delete} viešuosius metodus. (Pull Request)

  • Pasenusią use_transactional_fixtures naudojimą, pakeista į use_transactional_tests dėl aiškumo. (Pull Request)

  • Pasenusią stulpelio perdavimą į ActiveRecord::Connection#quote. (commit)

  • Pridėta end parinktis find_in_batches, kuri papildo start parametrą ir nurodo, kur sustabdyti partijų apdorojimą. (Pull Request)

6.5 Svarbūs pakeitimai

  • Pridėta foreign_key parinktis references kuriant lentelę. (commit)

  • Naujos atributų API. (commit)

  • Pridėta :_prefix/:_suffix parinktis enum apibrėžime. (Pull Request, Pull Request)

  • Pridėtas #cache_key metodas ActiveRecord::Relation. (Pull Request)

  • Pakeistas numatytasis null reikšmė timestamps į false. (commit)

  • Pridėtas ActiveRecord::SecureToken modelyje, skirtas apgaubti unikalių atributų žymėjimo generavimą naudojant SecureRandom. (Pull Request)

  • Pridėta :if_exists parinktis drop_table. (Pull Request)

  • Pridėtas ActiveRecord::Base#accessed_fields, kuris gali būti naudojamas greitai nustatyti, kurie laukai buvo nuskaityti iš modelio, kai norite tik išrinkti reikalingus duomenis iš duomenų bazės. (commit)

  • Pridėtas #or metodas ActiveRecord::Relation, leidžiantis naudoti ARBA operatorių, kad sudėtų WHERE arba HAVING sąlygas. (commit)

  • Pridėtas ActiveRecord::Base.suppress, kad bloke būtų išsaugotas gavėjas. (Pull Request)

  • belongs_to dabar pagal numatymą sukels validacijos klaidą, jei asociacija nėra pateikta. Galite tai išjungti kiekvienai asociacijai naudodami optional: true. Taip pat pasenusi required parinktis pakeista į optional belongs_to. (Pull Request)

  • Pridėta config.active_record.dump_schemas parinktis, skirta konfigūruoti db:structure:dump veikimą. (Pull Request)

  • Pridėta config.active_record.warn_on_records_fetched_greater_than parinktis. (Pull Request)

  • Pridėta natyvioji JSON duomenų tipo palaikymas MySQL. (Pull Request)

  • Pridėta palaikymo galimybė PostgreSQL duomenų bazėje ištrinti indeksus tuo pačiu metu. (Pull Request)

  • Pridėtos #views ir #view_exists? metodai prisijungimo adapteriuose. (Pull Request)

  • Pridėtas ActiveRecord::Base.ignored_columns metodas, kuris padaro tam tikrus stulpelius nematomus Active Record. (Pull Request)

  • Pridėti connection.data_sources ir connection.data_source_exists? metodai. Šie metodai nustato, kokios sąsajos gali būti naudojamos kaip pagrindas Active Record modeliams (dažniausiai tai yra lentelės ir vaizdai). (Pull Request)

  • Leidžiama fiktyvių duomenų failuose nustatyti modelio klasę YAML faile. (Pull Request)

  • Pridėta galimybė numatyti uuid kaip pirminį raktą generuojant duomenų bazės migracijas. (Pull Request)

  • Pridėti ActiveRecord::Relation#left_joins ir ActiveRecord::Relation#left_outer_joins metodai. (Pull Request)

  • Pridėti after_{create,update,delete}_commit atgaliniai kvietimai. (Pull Request)

  • Versijuojama API, kuris pateikiamas migracijų klasėms, taip galime pakeisti parametrų numatytuosius nustatymus, nesulaužant esamų migracijų ar verčiant jas per deprecijos ciklą. (Pull Request)

  • ApplicationRecord yra nauja viršklas visiems programos modeliams, analogiška programos valdikliams, kurie paveldi ApplicationController vietoj ActionController::Base. Tai suteikia programoms vieną vietą, kur konfigūruoti visoje programoje bendrą modelio elgesį. (Pull Request)

  • Pridėti ActiveRecord #second_to_last ir #third_to_last metodai. (Pull Request)

  • Pridėta galimybė anotuoti duomenų bazės objektus (lenteles, stulpelius, indeksus) su komentarais, saugomais duomenų bazės metaduomenyse PostgreSQL ir MySQL. (Pull Request)

  • Pridėta paruoštų teiginių palaikymo galimybė mysql2 adapteriui, naudojant mysql2 0.4.4+ versiją. Anksčiau tai buvo palaikoma tik pasenusiame mysql adapterio versijoje. Norėdami įjungti, nustatykite prepared_statements: true config/database.yml faile. (Pull Request)

  • Pridėta galimybė iškviesti ActionRecord::Relation#update metodą su sąryšio objektais, kuris vykdys validacijas ir atgalinius kvietimus visiems sąryšio objektams. (Pull Request)

  • Pridėtas :touch parametras save metode, kad įrašai galėtų būti išsaugoti be laiko žymėjimo atnaujinimo. (Pull Request)

  • Pridėta išraiškų indeksų ir operatorių klasių palaikymo galimybė PostgreSQL. (commit)

  • Pridėtas :index_errors parametras, kuris prideda indeksus prie įdėtų atributų klaidų. (Pull Request)

  • Pridėta palaikymo galimybė dvipusiams sunaikinimo priklausomybėms. (Pull Request)

  • Pridėtas palaikymo galimybė after_commit atgaliniams kvietimams transakciniuose testuose. (Pull Request)

  • Pridėtas foreign_key_exists? metodas, kuris patikrina, ar užsienio raktas egzistuoja lentelėje ar ne. (Pull Request)

  • Pridėtas :time parametras touch metode, kad būtų galima pakeisti įrašų laiką į kitą nei dabartinį laiką. (Pull Request)

  • Pakeisti transakcijos atgalinio iškvietimo funkciją, kad nebūtų slopinami klaidos. Prieš šį pakeitimą, bet kokios klaidos, iškeltos transakcijos atgalinio iškvietimo funkcijoje, buvo pagauti ir spausdinami žurnale, nebent naudojote (naujai pasenusią) raise_in_transactional_callbacks = true parinktį.

    Dabar šios klaidos nebėra pagautos ir tiesiog kyla, atitinkant kitų atgalinių iškvietimų elgesį. (commit)

7 Aktyvus modelis

Išsamių pakeitimų informacijai žiūrėkite [Changelog][active-model].

7.1 Pašalinimai

7.2 Pasenusios funkcijos

  • Pasenusi grąžinimo false reikšmė kaip būdas sustabdyti Aktyvaus modelio ir ActiveModel::Validations atgalinio iškvietimo grandinę. Rekomenduojama naudoti throw(:abort). (Pull Request)

  • Pasenusių ActiveModel::Errors#get, ActiveModel::Errors#set ir ActiveModel::Errors#[]= metodų, turinčių nesuderintą elgesį, palaikymas nutrauktas. (Pull Request)

  • Pasenusi :tokenizer parinktis validates_length_of metode, naudojant paprastą Ruby. (Pull Request)

  • Pasenusių ActiveModel::Errors#add_on_empty ir ActiveModel::Errors#add_on_blank funkcijų palaikymas be pakeitimo. (Pull Request)

7.3 Pastebimi pakeitimai

  • Pridėtas ActiveModel::Errors#details metodas, skirtas nustatyti, kuris tikrinimas nepavyko. (Pull Request)

  • Išskirtas ActiveRecord::AttributeAssignment į ActiveModel::AttributeAssignment leidžiant jį naudoti kaip įtraukiamą modulį bet kuriam objektui. (Pull Request)

  • Pridėti ActiveModel::Dirty#[attr_name]_previously_changed? ir ActiveModel::Dirty#[attr_name]_previous_change metodai, gerinant prieigą prie įrašytų pakeitimų po modelio išsaugojimo. (Pull Request)

  • Patikrinti keli kontekstai valid? ir invalid? metoduose vienu metu. (Pull Request)

  • Pakeistas validates_acceptance_of priimti true kaip numatytąją reikšmę be 1. (Pull Request)

8 Aktyvus darbas

Išsamių pakeitimų informacijai žiūrėkite [Changelog][active-job].

8.1 Pastebimi pakeitimai

  • ActiveJob::Base.deserialize deleguoja darbo klasės funkcijai. Tai leidžia darbams pridedant bet kokius metaduomenis, kai jie yra serializuojami, ir juos nuskaitant atliekant darbus. (Pull Request)

  • Pridėta galimybė konfigūruoti eilės adapterį pagal darbą, neįtakojant vienas kitą. (Pull Request)

  • Sugeneruotas darbas dabar pagal numatytuosius nustatymus paveldi iš app/jobs/application_job.rb. (Pull Request)

  • Leidžiama DelayedJob, Sidekiq, qu, que ir queue_classic pranešti darbo ID atgal į ActiveJob::Base kaip provider_job_id. (Pull Request, Pull Request, commit)

  • Įgyvendintas paprastas AsyncJob procesorius ir susijęs AsyncAdapter, kuris eilėje deda darbus į concurrent-ruby gijų grupę. (Pull Request)

  • Pakeistas numatytasis adapteris iš tiesioginio į asinchroninį. Tai geresnis numatytasis nustatymas, nes testai tuomet neteisingai nesiremia įvykių vykdymo sinchroniškumu. (commit)

    Aktyvusis palaikymas

Išsamesnės informacijos apie pakeitimus rasite Changelog.

8.2 Pašalinimai

  • Pašalintas pasenusi ActiveSupport::JSON::Encoding::CircularReferenceError. (commit)

  • Pašalinti pasenusių metodų ActiveSupport::JSON::Encoding.encode_big_decimal_as_string= ir ActiveSupport::JSON::Encoding.encode_big_decimal_as_string. (commit)

  • Pašalintas pasenusi ActiveSupport::SafeBuffer#prepend. (commit)

  • Pašalinti pasenusių metodų iš Kernel. silence_stderr, silence_stream, capture ir quietly. (commit)

  • Pašalintas pasenusi active_support/core_ext/big_decimal/yaml_conversions failas. (commit)

  • Pašalinti pasenusių metodų ActiveSupport::Cache::Store.instrument ir ActiveSupport::Cache::Store.instrument=. (commit)

  • Pašalintas pasenusi Class#superclass_delegating_accessor. Vietoj to naudokite Class#class_attribute. (Pull Request)

  • Pašalintas pasenusi ThreadSafe::Cache. Vietoj to naudokite Concurrent::Map. (Pull Request)

  • Pašalintas Object#itself, nes jis įgyvendintas Ruby 2.2. (Pull Request)

8.3 Pasenusių funkcijų žymėjimai

  • Pasenęs MissingSourceFile, naudokite LoadError vietoj. (commit)

  • Pasenęs alias_method_chain, naudokite Module#prepend, kuris buvo įvestas Ruby 2.0. (Pull Request)

  • Pasenęs ActiveSupport::Concurrency::Latch, naudokite Concurrent::CountDownLatch iš concurrent-ruby. (Pull Request)

  • Pasenęs :prefix parametras number_to_human_size metode, be pakeitimo. (Pull Request)

  • Pasenęs Module#qualified_const_, naudokite įdiegtus Module#const_ metodus. (Pull Request)

  • Pasenęs eilutės perdavimas, nenaudokite eilutės apibrėžiantys atgalinio iškvietimo. (Pull Request)

  • Pasenęs ActiveSupport::Cache::Store#namespaced_key, ActiveSupport::Cache::MemCachedStore#escape_key ir ActiveSupport::Cache::FileStore#key_file_path. Vietoj to naudokite normalize_key. (Pull Request, commit)

  • Pasenęs ActiveSupport::Cache::LocaleCache#set_cache_value, naudokite write_cache_value. (Pull Request)

  • Pasenęs argumentų perdavimas assert_nothing_raised. (Pull Request)

  • Pasenęs Module.local_constants, naudokite Module.constants(false). (Pull Request)

8.4 Svarbūs pakeitimai

  • Pridėti #verified ir #valid_message? metodai ActiveSupport::MessageVerifier. (Pull Request)

  • Pakeistas būdas, kaip galima sustabdyti atgalinio iškvietimo grandines. Nuo šiol pageidautina sustabdyti atgalinio iškvietimo grandinę išreiškiant throw(:abort). (Pull Request)

  • Naujas konfigūracijos parametras config.active_support.halt_callback_chains_on_return_false, skirtas nurodyti, ar ActiveRecord, ActiveModel ir ActiveModel::Validations atgalinio iškvietimo grandinės gali būti sustabdytos grąžinant false 'before' atgalinio iškvietimo metu. (Pull Request)

  • Pakeistas numatytasis testų tvarka iš :sorted į :random. (commit)

  • Pridėti #on_weekend?, #on_weekday?, #next_weekday, #prev_weekday metodai Date, Time ir DateTime. (Pull Request, Pull Request)

  • Pridėtas same_time parametras #next_week ir #prev_week metodams Date, Time ir DateTime. (Pull Request)

  • Pridėti #prev_day ir #next_day metodai, kurie yra analogai #yesterday ir #tomorrow metodams Date, Time ir DateTime. (Pull Request)

  • Pridėtas SecureRandom.base58 funkcionalumas, skirtas generuoti atsitiktinius base58 eilučių. (commit)

  • Pridėtas file_fixture į ActiveSupport::TestCase. Tai suteikia paprastą mechanizmą, skirtą pasiekti pavyzdinius failus jūsų testavimo atvejuose. (Pull Request)

  • Pridėtas #without metodas Enumerable ir Array, skirtas grąžinti kopiją išvardijimo be nurodytų elementų. (Pull Request)

  • Pridėtas ActiveSupport::ArrayInquirer ir Array#inquiry. (Pull Request)

  • Pridėtas ActiveSupport::TimeZone#strptime metodas, leidžiantis analizuoti laikus, tarsi jie būtų iš tam tikros laiko juostos. (commit)

  • Pridėti Integer#positive? ir Integer#negative? užklausos metodai, panašūs į Integer#zero?. (commit)

  • Pridėtas ActiveSupport::OrderedOptions gauti metodų bang versijas, kurios iškels KeyError, jei reikšmė yra .blank?. (Pull Request)

  • Pridėtas Time.days_in_year metodas, grąžinantis dienų skaičių duotam metams arba dabartiniam metui, jei nėra argumento. (commit)

  • Pridėtas įvykių stebėtojas failams, kuris asinchroniškai aptinka pakeitimus programos šaltinių kode, maršrutuose, lokalėse ir kt. (Pull Request)

  • Pridėtas thread_m/cattr_accessor/reader/writer metodų rinkinys, skirtas deklaruoti klasės ir modulio kintamuosius, kurie gyvena per giją. (Pull Request)

  • Pridėti Array#second_to_last ir Array#third_to_last metodai. (Pull Request)

  • Paskelbti ActiveSupport::Executor ir ActiveSupport::Reloader API, leidžiantys komponentams ir bibliotekoms valdyti ir dalyvauti vykdant programos kodą ir programos perkrovimo procesą. (Pull Request)

  • ActiveSupport::Duration dabar palaiko ISO8601 formatavimą ir analizavimą. (Pull Request)

  • ActiveSupport::JSON.decode dabar palaiko ISO8601 vietinių laikų analizavimą, kai įjungtas parse_json_times. (Pull Request)

  • ActiveSupport::JSON.decode dabar grąžina Date objektus datų eilutėms. (Pull Request)

  • Pridėta galimybė TaggedLogging leisti žurnalistams būti sukuriamiems kelis kartus, kad jie nesidalintų žymėmis tarpusavyje. (Pull Request)

9 Kreditai

Žiūrėkite pilną sąrašą Rails prisidėjusių asmenų, kurie daugelį valandų skyrė kurti Rails, stabilų ir patikimą karkasą. Dėkojame jiems visiems.

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.