1 Atnaujinimas iki Rails 4.2
Jei atnaujinote esamą programą, gerai būtų turėti gerą testų padengimą prieš pradedant. Taip pat pirmiausia turėtumėte atnaujinti iki Rails 4.1, jei dar to nedarėte, ir įsitikinti, kad jūsų programa vis dar veikia kaip tikėtasi, prieš bandant atnaujinti iki Rails 4.2. Atnaujinimo metu reikia atkreipti dėmesį į keletą dalykų, kuriuos galima rasti vadove Atnaujinimas Ruby on Rails.
2 Pagrindinės funkcijos
2.1 Active Job
Active Job yra nauja platforma Rails 4.2. Tai yra bendras sąsajos sluoksnis virš eilės sistemų, tokios kaip Resque, Delayed Job, Sidekiq ir kt.
Naudojant Active Job API parašyti darbai vykdomi bet kurioje palaikomoje eilėje dėka atitinkamų adapterių. Active Job jau yra sukonfigūruotas su įterptiniu vykdytoju, kuris iškart vykdo darbus.
Darbams dažnai reikia pateikti Active Record objektus kaip argumentus. Active Job perduoda objekto nuorodas kaip URI (uniform resource identifiers), o ne patį objektą. Naujoji Global ID biblioteka sukuria URI ir ieško objektų, į kuriuos jos nukreipia. Perduodant Active Record objektus kaip darbo argumentus, tai veikia naudojant Global ID viduje.
Pavyzdžiui, jei trashable
yra Active Record objektas, tada šis darbas veikia be jokio serializavimo:
class TrashableCleanupJob < ActiveJob::Base
def perform(trashable, depth)
trashable.cleanup(depth)
end
end
Daugiau informacijos rasite vadove Active Job Basics.
2.2 Asinchroninės pašto žinutės
Papildant Active Job, Action Mailer dabar turi deliver_later
metodą, kuris siunčia pašto žinutes per eilę, todėl jis neblokuoja kontrolerio ar modelio, jei eilė yra asinchroninė (numatytasis įterptinės eilės blokuoja).
Išsiųsti pašto žinutes iš karto vis dar įmanoma naudojant deliver_now
.
2.3 Adekvatus įrašas
Adekvatus įrašas yra veikimo pagerinimų rinkinys Active Record, kuris padaro įprastus find
ir find_by
kvietimus bei kai kuriuos asociacijos užklausas iki 2 kartų greitesnius.
Tai veikia taip, kad įprastus SQL užklausas kaip paruoštus teiginius talpina į talpyklą ir vėliau panaudoja panašiuose kvietimuose, praleisdama didžiąją dalį užklausos generavimo darbo kituose kvietimuose. Daugiau informacijos rasite Aaron Patterson tinklaraščio įraše.
Active Record automatiškai pasinaudos šia funkcija palaikomose operacijose be jokio vartotojo dalyvavimo ar kodų pakeitimų. Štai keletas pavyzdžių palaikomų operacijų:
Post.find(1) # Pirmasis kvietimas generuoja ir talpina paruoštą teiginį
Post.find(2) # Kituose kvietimuose naudojamas talpinamas paruoštas teiginys
Post.find_by_title('first post')
Post.find_by_title('second post')
Post.find_by(title: 'first post')
Post.find_by(title: 'second post')
post.comments
post.comments(true)
Svarbu paminėti, kad, kaip rodo aukščiau pateikti pavyzdžiai, paruošti teiginiai nekeliavo reikšmių, perduodamų metodų kvietimuose; jie turi vietoj jų vietos laikymo vietas.
Talpykla nenaudojama šiuose scenarijuose:
- Modelis turi numatytąjį apimtį
- Modelis naudoja vienos lentelės paveldėjimą
- find
su sąrašu id, pvz .:
```ruby
# nekešuota
Post.find(1, 2, 3)
Post.find([1,2])
```
find_by
su SQL fragmentais:Post.find_by('published_at < ?', 2 savaitės.ago)
2.4 Web Console
Naujos sukuriamos aplikacijos su Rails 4.2 dabar pagal numatymą turi Web
Console gemą. Web Console prideda
interaktyvią Ruby konsolę kiekvienoje klaidos puslapyje ir teikia console
rodinio
ir kontrolerio pagalbines funkcijas.
Interaktyvioji konsolė klaidos puslapiuose leidžia vykdyti kodą kontekste,
kurioje kilo išimtis. console
pagalbininkas, jei jis yra iškviestas
bet kurioje rodinyje ar kontroleryje, paleidžia interaktyvią konsolę su galutiniu
kontekstu, kai atlikta atvaizdavimas.
2.5 Užsienio rakto palaikymas
Migracijos DSL dabar palaiko užsienio raktų pridėjimą ir pašalinimą. Jie yra išmetami
į schema.rb
taip pat. Šiuo metu tik mysql
, mysql2
ir postgresql
adapteriai palaiko užsienio raktus.
# pridėti užsienio raktą į `articles.author_id`, kuris rodo į `authors.id`
add_foreign_key :articles, :authors
# pridėti užsienio raktą į `articles.author_id`, kuris rodo į `users.lng_id`
add_foreign_key :articles, :users, column: :author_id, primary_key: "lng_id"
# pašalinti užsienio raktą iš `accounts.branch_id`
remove_foreign_key :accounts, :branches
# pašalinti užsienio raktą iš `accounts.owner_id`
remove_foreign_key :accounts, column: :owner_id
Žr. API dokumentaciją apie add_foreign_key ir remove_foreign_key pilną aprašymą.
3 Nesuderinamumai
Anksčiau pažymėta funkcionalumas buvo pašalintas. Prašome kreiptis į atitinkamus komponentus dėl naujų pasenusiųjų šioje versijoje.
Šie pokyčiai gali reikalauti nedelsiant veiksmų po atnaujinimo.
3.1 render
su eilutės argumentu
Anksčiau, iškvietus render "foo/bar"
kontrolerio veiksmo metu, tai buvo lygiavertė
render file: "foo/bar"
. Rails 4.2 versijoje tai buvo pakeista ir dabar tai reiškia
render template: "foo/bar"
. Jei norite atvaizduoti failą, prašome
pakeisti kodą ir naudoti aiškų formatą (render file: "foo/bar"
) vietoj to.
3.2 respond_with
/ Klasės lygio respond_to
respond_with
ir atitinkamos klasės lygio respond_to
buvo perkeltos
į responders gemą. Norėdami
naudoti jį, pridėkite gem 'responders', '~> 2.0'
į savo Gemfile
:
# app/controllers/users_controller.rb
class UsersController < ApplicationController
respond_to :html, :json
def show
@user = User.find(params[:id])
respond_with @user
end
end
Egzemplioriaus lygio respond_to
nėra paveikta:
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
respond_to do |format|
format.html
format.json { render json: @user }
end
end
end
3.3 Numatytasis prievadas rails server
Dėl pakeitimo Rack'e (change in Rack),
rails server
dabar klausosi localhost
vietoje 0.0.0.0
pagal numatymą. Tai
turėtų turėti minimalų poveikį įprastam vystymo procesui, nes tiek
http://127.0.0.1:3000, tiek http://localhost:3000 toliau veiks kaip anksčiau
jūsų pačio mašinoje.
Tačiau su šiuo pakeitimu jūs nebegalėsite pasiekti Rails
serverio iš kitos mašinos, pvz., jei jūsų vystymo aplinka
yra virtualioje mašinoje ir norite pasiekti ją iš pagrindinės mašinos.
Tokiu atveju, paleiskite serverį su rails server -b 0.0.0.0
kad atkurtumėte seną elgesį.
Tai padarius, įsitikinkite, kad tinkamai sukonfigūravote ugniasienę, kad tik patikimos mašinos jūsų tinkle galėtų pasiekti jūsų vystymo serverį.
3.4 Pakeisti render
metodo statuso parinkties simboliai
Dėl pakeitimo Rack bibliotekoje, render
metodui priimami simboliai :status
parinkčiai buvo pakeisti:
- 306:
:reserved
buvo pašalintas. - 413:
:request_entity_too_large
buvo pervadintas į:payload_too_large
. - 414:
:request_uri_too_long
buvo pervadintas į:uri_too_long
. - 416:
:requested_range_not_satisfiable
buvo pervadintas į:range_not_satisfiable
.
Atkreipkite dėmesį, kad jei render
funkcija yra iškviesta su nežinomu simboliu, atsakymo statusas bus nustatytas į 500.
3.5 HTML Sanitizer
HTML Sanitizer buvo pakeistas nauju, patikimesniu, įgyvendinimu, kuris yra paremtas Loofah ir Nokogiri bibliotekomis. Naujas Sanitizer yra saugesnis, o jo sanitarizacija yra galingesnė ir lankstesnė.
Dėl naujo algoritmo, sanitarizuotas rezultatas gali skirtis tam tikriems patologiniams įvesties duomenims.
Jei jums reikia tikslaus senojo Sanitizer rezultato, galite pridėti rails-deprecated_sanitizer gemą į Gemfile
, kad gautumėte senąjį elgesį. Šis gemas nekelia deprecijos įspėjimų, nes jis yra pasirinktinis.
rails-deprecated_sanitizer
bus palaikomas tik Rails 4.2; jis nebus palaikomas Rails 5.0.
Daugiau informacijos apie naujojo Sanitizer pakeitimus galite rasti šiame blogo įraše.
3.6 assert_select
assert_select
dabar yra paremtas Nokogiri biblioteka. Dėl to, kai kurie anksčiau galioję selektoriai dabar nepalaikomi. Jei jūsų programa naudoja šiuos rašymus, jums reikės juos atnaujinti:
Reikšmės atributo selektoriuose gali prireikti cituoti, jei jose yra ne alfanumeriniai simboliai.
# anksčiau a[href=/] a[href$=/] # dabar a[href="/"] a[href$="/"]
Iš HTML šaltinio su netinkamai įdėtais elementais sudaryti DOM gali skirtis.
Pavyzdžiui:
# turinys: <div><i><p></i></div> # anksčiau: assert_select('div > i') # => true assert_select('div > p') # => false assert_select('i > p') # => true # dabar: assert_select('div > i') # => true assert_select('div > p') # => true assert_select('i > p') # => false
Jei pasirinkti duomenys turi entitetus, anksčiau pasirinkta palyginimo reikšmė buvo neapdorota (pvz.,
AT&T
), o dabar ji yra apdorota (pvz.,AT&T
).# turinys: <p>AT&T</p> # anksčiau: assert_select('p', 'AT&T') # => true assert_select('p', 'AT&T') # => false # dabar: assert_select('p', 'AT&T') # => true assert_select('p', 'AT&T') # => false
Be to, pakeitėsi pakeitimų sintaksė.
Dabar turite naudoti :match
CSS tipo selektorių:
assert_select ":match('id', ?)", 'comment_1'
Be to, kai sakinys nepavyksta, Regexp pakeitimai atrodo kitaip. Atkreipkite dėmesį, kaip /hello/
čia:
assert_select(":match('id', ?)", /hello/)
tampa "(?-mix:hello)"
:
Expected at least 1 element matching "div:match('id', "(?-mix:hello)")", found 0..
Expected 0 to be >= 1.
Daugiau informacijos apie assert_select
rasite Rails Dom Testing dokumentacijoje.
4 Railties
Išsamių pakeitimų informacijai žiūrėkite [Changelog][railties].
4.1 Pašalinimai
--skip-action-view
parinktis buvo pašalinta iš programos kūrėjo. (Pull Request)rails application
komanda buvo pašalinta be pakeitimo. (Pull Request)
4.2 Depreciations
Pasenusi trūkstama
config.log_level
konfigūracija produkcinėse aplinkose. (Pull Request)Pasenusi
rake test:all
komanda pakeista įrake test
, nes dabar ji paleidžia visus testustest
aplanke. (Pull Request)Pasenktas
rake test:all:db
naudairake test:db
. (Pull Request)Pasenktas
Rails::Rack::LogTailer
be pakeitimo. (Commit)
4.3 Svarbūs pakeitimai
Įtrauktas
web-console
į numatytąjį programosGemfile
. (Pull Request)Modelio generatoriui pridėta
required
parinktis asociacijoms. (Pull Request)Įvestas
x
vardų sritis, skirta apibrėžti pasirinktines konfigūracijos parinktis:# config/environments/production.rb config.x.payment_processing.schedule = :daily config.x.payment_processing.retries = 3 config.x.super_debugger = true
Šios parinktys tada yra pasiekiamos per konfigūracijos objektą:
Rails.configuration.x.payment_processing.schedule # => :daily Rails.configuration.x.payment_processing.retries # => 3 Rails.configuration.x.super_debugger # => true
(Commit)
Įvestas
Rails::Application.config_for
metodas, skirtas įkelti konfigūraciją esamai aplinkai.# config/exception_notification.yml production: url: http://127.0.0.1:8080 namespace: my_app_production development: url: http://localhost:3001 namespace: my_app_development
# config/environments/production.rb Rails.application.configure do config.middleware.use ExceptionNotifier, config_for(:exception_notification) end
Įvesta
--skip-turbolinks
parinktis programos generatoriuje, kad nebūtų generuojama turbolinks integracija. (Commit)Įvestas
bin/setup
scenarijus kaip konvencija automatiniam programos nustatymo kodo paleidimui. (Pull Request)Pakeista numatytoji reikšmė
config.assets.digest
įtrue
vystymo metu. (Pull Request)Įvestas API naujų plėtinių registravimui
rake notes
. (Pull Request)Įvestas
after_bundle
atgalinis kvietimas naudojimui Rails šablonuose. (Pull Request)Įvestas
Rails.gem_version
kaip patogus metodas grąžintiGem::Version.new(Rails.version)
. (Pull Request)
5 Action Pack
Išsamūs pakeitimai pateikiami [Changelog][action-pack].
5.1 Pašalinimai
respond_with
ir klasės lygiorespond_to
pašalinti iš Rails ir perkelti įresponders
gemą (versija 2.0). Norėdami toliau naudoti šias funkcijas, į savoGemfile
pridėkitegem 'responders', '~> 2.0'
. (Pull Request, Daugiau informacijos)Pašalintas pasenusių
AbstractController::Helpers::ClassMethods::MissingHelperError
naudaiAbstractController::Helpers::MissingHelperError
. (Commit)
5.2 Pasenusių funkcijų pažymėjimai
Pažymėta
only_path
parinktis*_path
pagalbininkams. (Commit)Pažymėta
assert_tag
,assert_no_tag
,find_tag
irfind_all_tag
funkcijų pasenusiųassert_select
naudai. (Commit)Pažymėta palaikymo pasenusiems maršrutizatoriaus
:to
parinkčių nustatymui simboliu arba eilute, kuri neapima#
simbolio:get '/posts', to: MyRackApp => (Nereikia keisti) get '/posts', to: 'post#index' => (Nereikia keisti) get '/posts', to: 'posts' => get '/posts', controller: :posts get '/posts', to: :index => get '/posts', action: :index
(Commit)
Pažymėtas palaikymo eilučių raktams URL pagalbininkuose pasenusiems:
# blogai root_path('controller' => 'posts', 'action' => 'index') # gerai root_path(controller: 'posts', action: 'index')
5.3 Svarbūs pakeitimai
Dokumentacijoje pašalinti
*_filter
metodų šeimos nariai. Jų naudojimas nerekomenduojamas, o vietoje jų rekomenduojami*_action
metodai:after_filter => after_action append_after_filter => append_after_action append_around_filter => append_around_action append_before_filter => append_before_action around_filter => around_action before_filter => before_action prepend_after_filter => prepend_after_action prepend_around_filter => prepend_around_action prepend_before_filter => prepend_before_action skip_after_filter => skip_after_action skip_around_filter => skip_around_action skip_before_filter => skip_before_action skip_filter => skip_action_callback
Jei jūsų programa priklauso nuo šių metodų, turėtumėte naudoti pakeitimo
*_action
metodus. Šie metodai bus pažymėti kaip pasenusiems ateityje ir galiausiai bus pašalinti iš Rails.render nothing: true
arbanil
kūno atvaizdavimas nebeprideda vieno tarpelio prie atsakymo kūno. (Pull Request)Dabar "Rails" automatiškai įtraukia šablono "digest" į ETag'us. (Pull Request)
URL pagalbininkams perduodami segmentai dabar automatiškai išvengiami. (Commit)
Įvesta "always_permitted_parameters" parinktis, skirta konfigūruoti, kurie parametrai yra leidžiami globaliai. Šios konfigūracijos numatytasis reikšmė yra
['controller', 'action']
. (Pull Request)Pridėtas HTTP metodas
MKCALENDAR
iš RFC 4791. (Pull Request)*_fragment.action_controller
pranešimuose dabar įtraukiamas kontrolerio ir veiksmo pavadinimas. (Pull Request)Gerintas maršruto klaidos puslapis su migloto atitikimo paieška maršrutams. (Pull Request)
Pridėta parinktis, leidžianti išjungti CSRF nesėkmių žurnalo įrašymą. (Pull Request)
Kai "Rails" serveris nustatomas aptarnauti statinius išteklius, gzip ištekliai dabar bus aptarnaujami, jei klientas tai palaiko ir diske yra iš anksto sugeneruotas gzip failas (
.gz
). Pagal nutylėjimą išteklių grandinė generuoja.gz
failus visiems suspaudžiamiems ištekliams. Gzip failų aptarnavimas sumažina duomenų perdavimą ir pagreitina išteklių užklausas. Visada naudokite CDN, jei aptarnaujate išteklius iš savo "Rails" serverio produkcijoje. (Pull Request)Skambinant
process
pagalbininkams integracinėje teste, kelias turi turėti pirminį pasvirąjį brūkšnį. Anksčiau galėjote jį praleisti, tačiau tai buvo įgyvendinimo šalutinis produktas, o ne sąmoninga funkcija, pvz.:test "list all posts" do get "/posts" assert_response :success end
6 Veiksmo rodinys
Išsamesniam pakeitimų sąrašui žiūrėkite [Changelog][action-view].
6.1 Pasenusios funkcijos
Pasenusi
AbstractController::Base.parent_prefixes
. KeiskiteAbstractController::Base.local_prefixes
, kai norite pakeisti, kur rasti rodinius. (Pull Request)Pasenusi
ActionView::Digestor#digest(name, format, finder, options = {})
. Vietoj to argumentai turėtų būti perduodami kaip maišos objektas. (Pull Request)
6.2 Pastebimi pakeitimai
render "foo/bar"
dabar išplečiamas įrender template: "foo/bar"
, o nerender file: "foo/bar"
. (Pull Request)Formos pagalbininkai daugiau nekuria
<div>
elemento su įterptu CSS aplink paslėptus laukus. (Pull Request)Įvestas
#{partial_name}_iteration
specialus vietinis kintamasis, skirtas naudoti su daliniais, kurie yra rodomi su kolekcija. Jis suteikia prieigą prie dabartinės iteracijos būsenos perindex
,size
,first?
irlast?
metodus. (Pull Request)Vietos I18n seka tą pačią konvenciją kaip ir
label
I18n. (Pull Request)
7 Veiksmo paštas
Išsamesniam pakeitimų sąrašui žiūrėkite [Changelog][action-mailer].
7.1 Pasenusios funkcijos
Pasenusi
*_path
pagalbininkai paštuose. Visada naudokite*_url
pagalbininkus. (Pull Request)Pasenusi
deliver
/deliver!
, naudokitedeliver_now
/deliver_now!
vietoje. (Pull Request)
7.2 Pastebimi pakeitimai
link_to
irurl_for
pagal nutylėjimą šablonuose generuoja absoliučius URL, nebūtina perduotionly_path: false
. (Commit)Įvestas
deliver_later
, kuris įtraukia užduotį į programos eilę asinchroniniam el. pašto pristatymui. (Pull Request)Pridėta
show_previews
konfigūracijos parinktis, leidžianti įjungti el. pašto peržiūras ne tik vystymo aplinkoje. (Pull Request)
8 Aktyvusis įrašas
Išsamesniam pakeitimų sąrašui žiūrėkite [Changelog][active-record].
8.1 Pašalinimai
Pašalintas
cache_attributes
ir panašūs. Visi atributai yra talpinami talpykloje. (Pull Request)Pašalinta pasenusi
ActiveRecord::Base.quoted_locking_column
funkcija. (Pull Request)Pašalinta pasenusi
ActiveRecord::Migrator.proper_table_name
funkcija. Vietoj jos naudokiteproper_table_name
objekto metodoActiveRecord::Migration
vietoje. (Pull Request)Pašalintas nenaudojamas
:timestamp
tipas. Visais atvejais jis dabar automatiškai susiejamas su:datetime
. Ištaisoma nesuderinamumas, kai stulpelių tipai yra siunčiami iš "Active Record" išorėje, pvz., XML serializacijai. (Pull Request)Nusistatymai
Nustatytas klaidų slėpimas
after_commit
irafter_rollback
viduje. (Pull Request)Nustatytas sugedęs palaikymas automatiniam skaitiklių talpyklų aptikimui
has_many :through
asociacijose. Vietoj to, turėtumėte rankiniu būdu nurodyti skaitiklių talpykląhas_many
irbelongs_to
asociacijose per perduodamus įrašus. (Pull Request)Nustatytas
Active Record
objektų perdavimas į.find
arba.exists?
kaip pasenusi. Pirmiausia turėtumėte paskambintiid
objektams. (Commit 1, 2)Nustatytas nepilnavertis palaikymas
PostgreSQL
diapazono reikšmėms su išskiriančiais pradžiomis. Šiuo metu atitinkamePostgreSQL
diapazonus su Ruby diapazonais. Šis konvertavimas nėra visiškai įmanomas, nes Ruby diapazonai nepalaiko išskiriančių pradžių.Dabartinis sprendimas pridėti pradžią nėra teisingas ir dabar yra pasenusi. Subtipams, kurių nežinome, kaip padidinti (pvz.,
succ
nėra apibrėžtas), tai sukelsArgumentError
išimtį diapazonams su išskiriančiomis pradžiomis. (Commit)Nustatytas
DatabaseTasks.load_schema
kvietimas be ryšio. Vietoj to naudokiteDatabaseTasks.load_schema_current
. (Commit)Nustatytas
sanitize_sql_hash_for_conditions
be pakeitimo. NaudojantRelation
užklausoms ir atnaujinimams yra pageidautinas API. (Commit)Nustatytas
add_timestamps
irt.timestamps
be:null
parinkties perdavimo. Numatytasisnull: true
pasikeis įnull: false
Rails 5 versijoje. (Pull Request)Nustatytas
Reflection#source_macro
be pakeitimo, nes jis daugiau nebenaudojamasActive Record
. (Pull Request)Nustatytas
serialized_attributes
be pakeitimo. (Pull Request)Nustatytas
nil
grąžinimas išcolumn_for_attribute
, kai stulpelis neegzistuoja. Tai grąžins nulio objektą Rails 5.0 versijoje. (Pull Request)Nustatytas
.joins
,.preload
ir.eager_load
naudojimas su asociacijomis priklausančiomis nuo objekto būsenos (t. y. tokiomis, kurios apibrėžtos su sąlyga, kuri priima argumentą) be pakeitimo. (Commit)
8.2 Svarbūs pakeitimai
SchemaDumper
naudojaforce: :cascade
antcreate_table
. Tai leidžia perkrauti schemą, kai yra užsienio raktai.Pridėta
:required
parinktis vienareikšmiams asociacijoms, kuri nustato būtinumo tikrinimą asociacijoje. (Pull Request)ActiveRecord::Dirty
dabar aptinka vietos pakeitimus keičiantiems reikšmėms. Serializuotos atributaiActive Record
modeliuose nebėra išsaugomi, kai nepasikeičia. Tai taip pat veikia su kitais tipais, pvz., eilutės stulpeliais ir json stulpeliaisPostgreSQL
. (Pull Requests 1, 2, 3)Įvestas
db:purge
Rake užduotis, skirta išvalyti duomenų bazę esamam aplinkai. (Commit)Įvestas
ActiveRecord::Base#validate!
, kuris iškeliaActiveRecord::RecordInvalid
išimtį, jei įrašas yra neteisingas. (Pull Request)Įvestas
validate
kaip sinonimasvalid?
. (Pull Request)touch
dabar priima kelis atributus, kurie bus paliesti vienu metu. (Pull Request)PostgreSQL
adapteris dabar palaikojsonb
duomenų tipąPostgreSQL
9.4+ versijoje. (Pull Request)PostgreSQL
irSQLite
adapteriai nebededa numatytos 255 simbolių ribos ant eilutės stulpelių. (Pull Request)Pridėta palaikymo
citext
stulpelio tipoPostgreSQL
adapteryje. (Pull Request)Pridėta palaikymo vartotojo sukurtiems diapazono tipams
PostgreSQL
adapteryje. (Commit)sqlite3:///some/path
dabar nusako absoliutų sistemos kelią/some/path
. Naudojant reliatyvius kodus, naudokitesqlite3:some/path
. (Anksčiau,sqlite3:///some/path
nusakė reliatyvų keliąsome/path
. Šis elgesys buvo pasenusi nuo Rails 4.1). (Pull Request)Pridėtas palaikymas trupmeninėms sekundėms
MySQL
5.6 ir naujesnėse versijose. (Pull Request 1, 2)Pridėtas
ActiveRecord::Base#pretty_print
metodas, skirtas gražiam išvedimui modeliams. (Pull Request)ActiveRecord::Base#reload
dabar elgiasi taip pat kaipm = Model.find(m.id)
, tai reiškia, kad ji nebeturi papildomų atributų iš pasirinktųSELECT
užklausų. (Pull Request)ActiveRecord::Base#reflections
dabar grąžinaHash
su tekstiniais raktų pavadinimais, o ne simboliais. (Pull Request)references
metodas migracijose dabar palaikotype
parinktį, skirtą nurodyti užsienio rakto tipo (pvz.,:uuid
). (Pull Request)
9 Active Model
Išsamius pakeitimus žr. [Changelog][active-model].
9.1 Pašalinimai
- Pašalintas pasenusių
Validator#setup
metodo, be pakeitimo. (Pull Request)
9.2 Pasenusių funkcijų pranešimai
Pasenusi
reset_#{attribute}
funkcija pakeista įrestore_#{attribute}
. (Pull Request)Pasenusi
ActiveModel::Dirty#reset_changes
funkcija pakeista įclear_changes_information
. (Pull Request)
9.3 Svarbūs pakeitimai
Įvestas
validate
kaip sinonimasvalid?
funkcijai. (Pull Request)Įvestas
restore_attributes
metodasActiveModel::Dirty
klasėje, skirtas atkurti pakeistus (nešvarius) atributus į jų ankstesnes reikšmes. (Pull Request 1, 2)has_secure_password
dabar leidžia tuščius slaptažodžius (t.y. slaptažodžius, kurie sudaryti tik iš tarpų) pagal nutylėjimą. (Pull Request)has_secure_password
dabar patikrina, ar pateiktas slaptažodis yra mažiau nei 72 simboliai, jei įgalintos validacijos. (Pull Request)
10 Active Support
Išsamius pakeitimus žr. Changelog.
10.1 Pašalinimai
Pašalinti pasenusių
Numeric#ago
,Numeric#until
,Numeric#since
,Numeric#from_now
funkcijų. (Commit)Pašalinti pasenusių eilučių bazės
ActiveSupport::Callbacks
. (Pull Request)
10.2 Pasenusių funkcijų pranešimai
Pasenusios
Kernel#silence_stderr
,Kernel#capture
irKernel#quietly
funkcijos be pakeitimo. (Pull Request)Pasenusi
Class#superclass_delegating_accessor
funkcija, naudokiteClass#class_attribute
vietoje. (Pull Request)Pasenusi
ActiveSupport::SafeBuffer#prepend!
funkcija, nesActiveSupport::SafeBuffer#prepend
dabar atlieka tą pačią funkciją. (Pull Request)
10.3 Svarbūs pakeitimai
Įvesta nauja konfigūracijos parinktis
active_support.test_order
, skirta nurodyti testų vykdymo tvarką. Ši parinktis dabar pagal nutylėjimą yra:sorted
, bet nuo Rails 5.0 ji bus pakeista į:random
. (Commit)Object#try
irObject#try!
dabar gali būti naudojamos be aiškaus gavėjo bloke. (Commit, Pull Request)travel_to
testavimo pagalbininkas dabar nukerpiausec
komponentą iki 0. (Commit)Įvestas
Object#itself
kaip tapatybės funkcija. (Commit 1, 2)Object#with_options
dabar gali būti naudojama be aiškaus gavėjo bloke. (Pull Request)Įvestas
String#truncate_words
funkcija, skirta sutrumpinti eilutę pagal žodžių skaičių. (Pull Request)Pridėtos
Hash#transform_values
irHash#transform_values!
funkcijos, skirtos supaprastinti dažną modelio reikšmių keitimo šabloną, kai raktai lieka tokie patys. (Pull Request)humanize
inflektoriaus pagalbininkas dabar pašalina bet kokius pradinius pabraukimus. (Commit)Įvestas
Concern#class_methods
kaip alternatyvamodule ClassMethods
, taip patKernel#concern
funkcija, skirta išvengtimodule Foo; extend ActiveSupport::Concern; end
šabloninio kodo. (Commit)Naujas vadovas apie konstantų automatinį įkėlimą ir perkrovimą.
11 Autoriai
Žr. pilną Rails prisidėjusių asmenų sąrašą, kuris apima daugybę žmonių, kurie daugybę valandų skyrė tam, kad Rails taptų stabilia ir patikima karkasu, koks jis yra šiandien. Dėkojame 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.