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

Ruby on Rails 4.2 Išleidimo pastabos

Svarbiausi dalykai Rails 4.2:

Šios išleidimo pastabos apima tik pagrindinius pokyčius. Norėdami sužinoti apie kitas funkcijas, klaidų taisymus ir pokyčius, prašome kreiptis į pakeitimų žurnalus arba peržiūrėti pokyčių sąrašą pagrindiniame Rails saugykloje GitHub.

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&amp;T), o dabar ji yra apdorota (pvz., AT&T).

    # turinys: <p>AT&amp;T</p>
    
    # anksčiau:
    assert_select('p', 'AT&amp;T')  # => true
    assert_select('p', 'AT&T')      # => false
    
    # dabar:
    assert_select('p', 'AT&T')      # => true
    assert_select('p', 'AT&amp;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 testus test aplanke. (Pull Request)

  • Pasenktas rake test:all:db naudai rake test:db. (Pull Request)

  • Pasenktas Rails::Rack::LogTailer be pakeitimo. (Commit)

4.3 Svarbūs pakeitimai

  • Įtrauktas web-console į numatytąjį programos Gemfile. (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
    

    (Pull Request)

  • Į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ąžinti Gem::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 lygio respond_to pašalinti iš Rails ir perkelti į responders gemą (versija 2.0). Norėdami toliau naudoti šias funkcijas, į savo Gemfile pridėkite gem 'responders', '~> 2.0'. (Pull Request, Daugiau informacijos)

  • Pašalintas pasenusių AbstractController::Helpers::ClassMethods::MissingHelperError naudai AbstractController::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 ir find_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')
    

    (Pull Request)

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.

    (Commit 1, 2)

  • render nothing: true arba nil 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 MKCALENDARRFC 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. Keiskite AbstractController::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 ne render 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 per index, size, first? ir last? 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!, naudokite deliver_now / deliver_now! vietoje. (Pull Request)

7.2 Pastebimi pakeitimai

  • link_to ir url_for pagal nutylėjimą šablonuose generuoja absoliučius URL, nebūtina perduoti only_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 naudokite proper_table_name objekto metodo ActiveRecord::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 ir after_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 ir belongs_to asociacijose per perduodamus įrašus. (Pull Request)

  • Nustatytas Active Record objektų perdavimas į .find arba .exists? kaip pasenusi. Pirmiausia turėtumėte paskambinti id objektams. (Commit 1, 2)

  • Nustatytas nepilnavertis palaikymas PostgreSQL diapazono reikšmėms su išskiriančiais pradžiomis. Šiuo metu atitinkame PostgreSQL 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 sukels ArgumentError išimtį diapazonams su išskiriančiomis pradžiomis. (Commit)

  • Nustatytas DatabaseTasks.load_schema kvietimas be ryšio. Vietoj to naudokite DatabaseTasks.load_schema_current. (Commit)

  • Nustatytas sanitize_sql_hash_for_conditions be pakeitimo. Naudojant Relation užklausoms ir atnaujinimams yra pageidautinas API. (Commit)

  • Nustatytas add_timestamps ir t.timestamps be :null parinkties perdavimo. Numatytasis null: true pasikeis į null: false Rails 5 versijoje. (Pull Request)

  • Nustatytas Reflection#source_macro be pakeitimo, nes jis daugiau nebenaudojamas Active 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 naudoja force: :cascade ant create_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 atributai Active Record modeliuose nebėra išsaugomi, kai nepasikeičia. Tai taip pat veikia su kitais tipais, pvz., eilutės stulpeliais ir json stulpeliais PostgreSQL. (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škelia ActiveRecord::RecordInvalid išimtį, jei įrašas yra neteisingas. (Pull Request)

  • Įvestas validate kaip sinonimas valid?. (Pull Request)

  • touch dabar priima kelis atributus, kurie bus paliesti vienu metu. (Pull Request)

  • PostgreSQL adapteris dabar palaiko jsonb duomenų tipą PostgreSQL 9.4+ versijoje. (Pull Request)

  • PostgreSQL ir SQLite adapteriai nebededa numatytos 255 simbolių ribos ant eilutės stulpelių. (Pull Request)

  • Pridėta palaikymo citext stulpelio tipo PostgreSQL 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, naudokite sqlite3: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 kaip m = Model.find(m.id), tai reiškia, kad ji nebeturi papildomų atributų iš pasirinktų SELECT užklausų. (Pull Request)

  • ActiveRecord::Base#reflections dabar grąžina Hash su tekstiniais raktų pavadinimais, o ne simboliais. (Pull Request)

  • references metodas migracijose dabar palaiko type 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 sinonimas valid? funkcijai. (Pull Request)

  • Įvestas restore_attributes metodas ActiveModel::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 ir Kernel#quietly funkcijos be pakeitimo. (Pull Request)

  • Pasenusi Class#superclass_delegating_accessor funkcija, naudokite Class#class_attribute vietoje. (Pull Request)

  • Pasenusi ActiveSupport::SafeBuffer#prepend! funkcija, nes ActiveSupport::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 ir Object#try! dabar gali būti naudojamos be aiškaus gavėjo bloke. (Commit, Pull Request)

  • travel_to testavimo pagalbininkas dabar nukerpia usec 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 ir Hash#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 alternatyva module ClassMethods, taip pat Kernel#concern funkcija, skirta išvengti module 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.