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 neActionController::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
irrespond_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
irassert_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 naudotifollow_redirect!
rankiniu būdu. (Pull Request)Pasenusios
AbstractController#skip_action_callback
funkcijos, naudoti atskiras skip_callback metodus. (Pull Request)Pasenusios
:nothing
parinktisrender
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
, naudokiteredirect_back
, kuris priima privalomąfallback_location
argumentą, taip pašalindamasRedirectBackError
galimybę. (Pull Request)ActionDispatch::IntegrationTest
irActionController::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, naudokiteActionDispatch::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
irActionDispatch::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 kaipActionController::Base
pakeitimas šios rūšies programoms. (Pull Request)ActionController::Parameters
daugiau neįgyvendinaHashWithIndifferentAccess
. (Pull Request)Padaryta lengviau įjungti
config.force_ssl
irconfig.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 naudokiteActionDispatch::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 atvaizduojamihead :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
irstale?
. (Pull Request)ActionController::Live
tapoActiveSupport::Concern
. Tai reiškia, kad jis negali būti tiesiog įtrauktas į kitus modulius be išplėtimo suActiveSupport::Concern
arbaActionController::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, naudojantActionController::Live
. (Daugiau informacijos šiame klausime)Įvesti
Response#strong_etag=
ir#weak_etag=
ir analogiški parametraifresh_when
irstale?
. (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
parinktistranslate
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 tipudatetime-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
irdeliver!
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
irassert_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 pakeistaActiveRecord::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
irsymbolized_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 naudotimysql2
. 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 yrathrow(:abort)
. (Pull Request)Paseninta
ActiveRecord::Base.errors_in_transactional_callbacks=
funkcija. (commit)Paseninta
Relation#uniq
funkcija, naudokiteRelation#distinct
vietoj to. (commit)Pasenintas PostgreSQL
:point
tipas naudai naujo, kuris grąžinsPoint
objektus vietojArray
. (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?
irSchemaCache#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 naudotioffset
metodą vietoje. (Pull Request)Pasenusius
{insert|update|delete}_sql
metodusDatabaseStatements
. 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
parinktisfind_in_batches
, kuri papildostart
parametrą ir nurodo, kur sustabdyti partijų apdorojimą. (Pull Request)
6.5 Svarbūs pakeitimai
Pridėta
foreign_key
parinktisreferences
kuriant lentelę. (commit)Naujos atributų API. (commit)
Pridėta
:_prefix
/:_suffix
parinktisenum
apibrėžime. (Pull Request, Pull Request)Pridėtas
#cache_key
metodasActiveRecord::Relation
. (Pull Request)Pakeistas numatytasis
null
reikšmėtimestamps
įfalse
. (commit)Pridėtas
ActiveRecord::SecureToken
modelyje, skirtas apgaubti unikalių atributų žymėjimo generavimą naudojantSecureRandom
. (Pull Request)Pridėta
:if_exists
parinktisdrop_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
metodasActiveRecord::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 naudodamioptional: true
. Taip pat pasenusirequired
parinktis pakeista įoptional
belongs_to
. (Pull Request)Pridėta
config.active_record.dump_schemas
parinktis, skirta konfigūruotidb: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
irconnection.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
irActiveRecord::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 paveldiApplicationController
vietojActionController::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 pasenusiamemysql
adapterio versijoje. Norėdami įjungti, nustatykiteprepared_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
parametrassave
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
parametrastouch
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
Pašalintas pasenusių
ActiveModel::Dirty#reset_#{attribute}
irActiveModel::Dirty#reset_changes
metodų palaikymas. (Pull Request)Pašalinta XML serializacija. Ši funkcija buvo išskirta į activemodel-serializers-xml gemą. (Pull Request)
Pašalintas
ActionController::ModelNaming
modulis. (Pull Request)
7.2 Pasenusios funkcijos
Pasenusi grąžinimo
false
reikšmė kaip būdas sustabdyti Aktyvaus modelio irActiveModel::Validations
atgalinio iškvietimo grandinę. Rekomenduojama naudotithrow(:abort)
. (Pull Request)Pasenusių
ActiveModel::Errors#get
,ActiveModel::Errors#set
irActiveModel::Errors#[]=
metodų, turinčių nesuderintą elgesį, palaikymas nutrauktas. (Pull Request)Pasenusi
:tokenizer
parinktisvalidates_length_of
metode, naudojant paprastą Ruby. (Pull Request)Pasenusių
ActiveModel::Errors#add_on_empty
irActiveModel::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?
irActiveModel::Dirty#[attr_name]_previous_change
metodai, gerinant prieigą prie įrašytų pakeitimų po modelio išsaugojimo. (Pull Request)Patikrinti keli kontekstai
valid?
irinvalid?
metoduose vienu metu. (Pull Request)Pakeistas
validates_acceptance_of
priimtitrue
kaip numatytąją reikšmę be1
. (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
irqueue_classic
pranešti darbo ID atgal įActiveJob::Base
kaipprovider_job_id
. (Pull Request, Pull Request, commit)Įgyvendintas paprastas
AsyncJob
procesorius ir susijęsAsyncAdapter
, 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=
irActiveSupport::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
irquietly
. (commit)Pašalintas pasenusi
active_support/core_ext/big_decimal/yaml_conversions
failas. (commit)Pašalinti pasenusių metodų
ActiveSupport::Cache::Store.instrument
irActiveSupport::Cache::Store.instrument=
. (commit)Pašalintas pasenusi
Class#superclass_delegating_accessor
. Vietoj to naudokiteClass#class_attribute
. (Pull Request)Pašalintas pasenusi
ThreadSafe::Cache
. Vietoj to naudokiteConcurrent::Map
. (Pull Request)Pašalintas
Object#itself
, nes jis įgyvendintas Ruby 2.2. (Pull Request)
8.3 Pasenusių funkcijų žymėjimai
Pasenęs
MissingSourceFile
, naudokiteLoadError
vietoj. (commit)Pasenęs
alias_method_chain
, naudokiteModule#prepend
, kuris buvo įvestas Ruby 2.0. (Pull Request)Pasenęs
ActiveSupport::Concurrency::Latch
, naudokiteConcurrent::CountDownLatch
iš concurrent-ruby. (Pull Request)Pasenęs
:prefix
parametrasnumber_to_human_size
metode, be pakeitimo. (Pull Request)Pasenęs
Module#qualified_const_
, naudokite įdiegtusModule#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
irActiveSupport::Cache::FileStore#key_file_path
. Vietoj to naudokitenormalize_key
. (Pull Request, commit)Pasenęs
ActiveSupport::Cache::LocaleCache#set_cache_value
, naudokitewrite_cache_value
. (Pull Request)Pasenęs argumentų perdavimas
assert_nothing_raised
. (Pull Request)Pasenęs
Module.local_constants
, naudokiteModule.constants(false)
. (Pull Request)
8.4 Svarbūs pakeitimai
Pridėti
#verified
ir#valid_message?
metodaiActiveSupport::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ąžinantfalse
'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
metodaiDate
,Time
irDateTime
. (Pull Request, Pull Request)Pridėtas
same_time
parametras#next_week
ir#prev_week
metodamsDate
,Time
irDateTime
. (Pull Request)Pridėti
#prev_day
ir#next_day
metodai, kurie yra analogai#yesterday
ir#tomorrow
metodamsDate
,Time
irDateTime
. (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
metodasEnumerable
irArray
, skirtas grąžinti kopiją išvardijimo be nurodytų elementų. (Pull Request)Pridėtas
ActiveSupport::ArrayInquirer
irArray#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?
irInteger#negative?
užklausos metodai, panašūs įInteger#zero?
. (commit)Pridėtas
ActiveSupport::OrderedOptions
gauti metodų bang versijas, kurios iškelsKeyError
, 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
irArray#third_to_last
metodai. (Pull Request)Paskelbti
ActiveSupport::Executor
irActiveSupport::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 įjungtasparse_json_times
. (Pull Request)ActiveSupport::JSON.decode
dabar grąžinaDate
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.