Norėdami įdiegti Rails 3:
# Jei jūsų sąranka to reikalauja, naudokite sudo
$ gem install rails
1 Atnaujinimas į Rails 3
Jei atnaujinat esamą aplikaciją, gerai būtų turėti gerą testų padengimą prieš pradedant. Taip pat pirmiausia atnaujinkite iki Rails 2.3.5 ir įsitikinkite, kad jūsų aplikacija veikia kaip tikėtasi, prieš bandant atnaujinti į Rails 3. Tada atkreipkite dėmesį į šiuos pakeitimus:
1.1 Rails 3 reikalauja bent Ruby 1.8.7
Rails 3.0 reikalauja Ruby 1.8.7 arba naujesnės versijos. Visos ankstesnės Ruby versijos oficialiai nebepalaikomos ir jums reikėtų atnaujinti kuo greičiau. Rails 3.0 taip pat yra suderinamas su Ruby 1.9.2.
PATARIMAS: Atkreipkite dėmesį, kad Ruby 1.8.7 p248 ir p249 turi maršalizavimo klaidas, kurios sukelia Rails 3.0 sutrikimus. Ruby Enterprise Edition turi šias klaidas ištaisytas nuo 1.8.7-2010.02 versijos. Dėl 1.9 versijos, Ruby 1.9.1 nėra naudojamas, nes jis tiesiog iššoka klaidas su Rails 3.0, todėl jei norite naudoti Rails 3 su 1.9.x, naudokite 1.9.2 versiją.
1.2 Rails aplikacijos objektas
Kaip dalis pagrindų, skirtų palaikyti kelias Rails aplikacijas tame pačiame procese, Rails 3 įveda aplikacijos objekto sąvoką. Aplikacijos objektas laiko visus aplikacijos specifinius konfigūracijas ir yra labai panašus į config/environment.rb
iš ankstesnių Rails versijų.
Kiekvienai Rails aplikacijai dabar turi būti atitinkamas aplikacijos objektas. Aplikacijos objektas yra apibrėžtas config/application.rb
. Jei atnaujinat esamą aplikaciją į Rails 3, turite pridėti šį failą ir perkelti tinkamas konfigūracijas iš config/environment.rb
į config/application.rb
.
1.3 script/* pakeista į script/rails
Naujasis script/rails
pakeičia visus skriptus, kurie buvo script
kataloge. Tačiau jūs nenaudojate script/rails
tiesiogiai, rails
komanda aptinka, kad ji yra kviečiama iš Rails aplikacijos šakninio katalogo ir paleidžia skriptą už jus. Numatytas naudojimas yra:
$ rails console # vietoj script/console
$ rails g scaffold post title:string # vietoj script/generate scaffold post title:string
Paleiskite rails --help
norėdami pamatyti visų galimybių sąrašą.
1.4 Priklausomybės ir config.gem
config.gem
metodas yra panaikintas ir pakeistas naudojant bundler
ir Gemfile
, žr. Gems'ų Vendorinimas žemiau.
1.5 Atnaujinimo procesas
Norint padėti su atnaujinimo procesu, sukurtas įskiepis pavadinimu Rails Upgrade, kuris dalinai automatizuoja jį.
Tiesiog įdiekite įskiepį, tada paleiskite rake rails:upgrade:check
, kad patikrintumėte savo aplikaciją dėl dalių, kurios turi būti atnaujintos (su nuorodomis į informaciją, kaip jas atnaujinti). Taip pat jis siūlo užduotį, kuri pagal jūsų esamus config.gem
iškvietimus sugeneruoja Gemfile
, ir užduotį, kuri pagal jūsų esamą maršrutų failą sugeneruoja naują maršrutų failą. Norėdami gauti įskiepį, tiesiog paleiskite šią komandą:
bash
$ ruby script/plugin install git://github.com/rails/rails_upgrade.git
Galite pamatyti, kaip tai veikia, adresu Rails Upgrade yra dabar oficialus įskiepis
Be Rails Upgrade įrankio, jei jums reikia daugiau pagalbos, yra žmonių IRC ir rubyonrails-talk, kurie tikriausiai daro tą patį dalyką ir gali patirti tuos pačius sunkumus. Būkite tikri, kad rašysite savo patirtis, kai atnaujinate, kad kiti galėtų pasinaudoti jūsų žiniomis!
2 Kuriamas „Rails 3.0“ programa
# Jums turėtų būti įdiegtas „rails“ RubyGem
$ rails new myapp
$ cd myapp
2.1 Gems prekyba
Dabar „Rails“ naudoja Gemfile
programos šaknies aplankui, kad nustatytų jums reikalingas „gems“, kad jūsų programa galėtų paleisti. Šis Gemfile
apdorojamas naudojant Bundler, kuris tada įdiegia visus jūsų priklausomybes. Jis netgi gali įdiegti visas priklausomybes vietiniame jūsų programos aplankale, kad ji nebūtų priklausoma nuo sistemos „gems“.
Daugiau informacijos: - bundler homepage
2.2 Gyvenimas ant krašto
Bundler
ir Gemfile
leidžia lengvai užšaldyti jūsų „Rails“ programą naudojant naują specialųjį bundle
komandą, todėl rake freeze
nebėra aktualus ir buvo pašalintas.
Jei norite tiesiogiai įtraukti iš „Git“ saugyklos, galite perduoti --edge
žymą:
$ rails new myapp --edge
Jei turite vietinį „Rails“ saugyklos kopiją ir norite sukurti programą, naudodami ją, galite perduoti --dev
žymą:
$ ruby /path/to/rails/bin/rails new myapp --dev
3 „Rails“ architektūros pokyčiai
Yra šeši pagrindiniai pokyčiai „Rails“ architektūroje.
3.1 Railties persiuvimas
Railties buvo atnaujintas, kad suteiktų nuoseklią įskiepių API visai „Rails“ platformai, taip pat visiškai perrašyti generatoriai ir „Rails“ ryšiai, rezultatas yra tas, kad dabar programuotojai gali prisijungti prie bet kurios svarbios generatorių ir programos pagrindo stadijos nuosekliai, apibrėžtu būdu.
3.2 Visi „Rails“ pagrindiniai komponentai yra atskirti
Su „Merb“ ir „Rails“ sujungimu vienas iš didžiųjų darbų buvo pašalinti glaudų ryšį tarp „Rails“ pagrindinių komponentų. Tai dabar pasiekta, ir visi „Rails“ pagrindiniai komponentai dabar naudoja tą pačią API, kurią galite naudoti kurdami įskiepius. Tai reiškia, kad bet kurį įskiepį, kurį sukursite, arba bet kurį pagrindinio komponento pakeitimą (pvz., „DataMapper“ ar „Sequel“), galima pasiekti visas funkcijas, prie kurių „Rails“ pagrindiniai komponentai turi prieigą, ir išplėsti bei patobulinti pagal poreikį.
Daugiau informacijos: - The Great Decoupling
3.3 Aktyvaus modelio abstrakcija
Dalis pagrindinių komponentų atskyrimo buvo ištraukti visi ryšiai su „Active Record“ iš „Action Pack“. Tai dabar yra baigta. Visi nauji ORM įskiepiai dabar tiesiog turi įgyvendinti „Active Model“ sąsajas, kad veiktų sklandžiai su „Action Pack“.
Daugiau informacijos: - Make Any Ruby Object Feel Like ActiveRecord
3.4 Valdiklio abstrakcija
Kitas didelis pagrindinių komponentų atskyrimo dalykas buvo sukurti bazinį viršklasę, kuri yra atskirta nuo HTTP sąvokų, kad galėtų tvarkyti rodinio vaizdus ir kt. Šio „AbstractController“ sukūrimas leido labai supaprastinti „ActionController“ ir „ActionMailer“, pašalinant bendrą kodą iš visų šių bibliotekų ir perkeldant jį į abstraktų valdiklį.
Daugiau informacijos: - Rails Edge Architecture
3.5 Arel integracija
Arel (arba „Active Relation“) tapo pagrindu „Active Record“ ir dabar yra būtinas „Rails“. Arel teikia SQL abstrakciją, kuri supaprastina „Active Record“ ir suteikia pagrindą sąryšio funkcionalumui „Active Record“.
Daugiau informacijos: - Why I wrote Arel
3.6 Pašto ištraukimas
Veiksmų siuntėjas nuo pat pradžių turėjo beveik visus pašto žinučių susijusius funkcionalumus, įskaitant netgi tarpines analizės priemones ir pristatymo bei gavimo agentus, visi tai papildomai turi „TMail“ pardavinėjimą šaltinio medžio medžiagoje. 3 versija tai pakeičia, visi pašto žinučių susiję funkcionalumai išskiriami į Mail įskiepį. Tai vėl sumažina kodo dublikavimą ir padeda sukurti aiškias ribas tarp „Action Mailer“ ir pašto analizatoriaus.
Daugiau informacijos: - New Action Mailer API in Rails 3
4 Dokumentacija
Dokumentacija „Rails“ medžio yra atnaujinama su visais API pakeitimais, be to, Rails Edge vadovai yra atnaujinami vienas po kito, atspindintys „Rails 3.0“ pakeitimus. Vadovai adresu guides.rubyonrails.org vis dėlto ir toliau turės tik stabilios versijos „Rails“ (šiuo metu 2.3.5 versijos, kol bus išleistas 3.0).
Daugiau informacijos: - Rails Documentation Projects
5 Tarptautinės sertifikavimo institucijos
Rails 3 buvo atliktas didelis darbas, susijęs su I18n palaikymu, įskaitant naujausią I18n biblioteką, kuri suteikia daug greičio patobulinimų.
- I18n funkcionalumas gali būti pridėtas prie bet kurio objekto, įtraukiant
ActiveModel::Translation
irActiveModel::Validations
. Taip pat yraerrors.messages
atsarginė vertimų funkcija. - Atributai gali turėti numatytuosius vertimus.
- Formos siuntimo žymės automatiškai paima teisingą būseną (Sukurti arba Atnaujinti), priklausomai nuo objekto būsenos, ir taip pat paima teisingą vertimą.
- Etiketės su I18n dabar veikia, tiesiog perduodant atributo pavadinimą.
Daugiau informacijos: - Rails 3 I18n pakeitimai
6 Railties
Atskiriant pagrindinius Rails karkaso komponentus, Railties buvo atliktas didelis peržiūrėjimas, siekiant padaryti sąsajas su karkaso komponentais, moduliais ar įskiepiais kuo paprastesnes ir plėtojamas:
- Kiekviena programa dabar turi savo vardų erdvę, programa pradedama su
YourAppName.boot
, pavyzdžiui, tai padaro sąveiką su kitomis programomis daug paprastesnę. - Visa, kas yra
Rails.root/app
, dabar pridedama prie krovimo kelio, todėl galite sukurtiapp/observers/user_observer.rb
ir Rails ją įkels be jokių modifikacijų. Rails 3.0 dabar teikia
Rails.config
objektą, kuris suteikia centralizuotą visų rūšių Rails konfigūracijos parinkčių saugyklą.Programos generavimas gavo papildomus parametrus, leidžiančius praleisti test-unit, Active Record, Prototype ir Git diegimą. Taip pat buvo pridėta nauja
--dev
parametras, kuris nustato programą suGemfile
, nurodančiu jūsų Rails kopijos vietą (kurią nustato kelias ikirails
vykdomojo failo). Daugiau informacijos rasiterails --help
.
Railties generatoriai buvo labai atidžiai peržiūrėti Rails 3.0, pagrindiniai pokyčiai:
- Generatoriai buvo visiškai peržiūrėti ir yra nekompatibilūs atgal.
- Rails šablonų API ir generatorių API buvo sujungti (jie yra tokie patys kaip anksčiau).
- Generatoriai daugiau neįkeliami iš specialių kelių, jie tiesiog randami Ruby krovimo kelyje, todėl kviečiant
rails generate foo
bus ieškomagenerators/foo_generator
. - Nauji generatoriai suteikia kablys, todėl bet kokia šablonų sistema, ORM, testavimo karkasas gali lengvai prisijungti.
- Nauji generatoriai leidžia perrašyti šablonus, padėdami kopiją į
Rails.root/lib/templates
. - Taip pat pateikiamas
Rails::Generators::TestCase
, kad galėtumėte kurti savo generatorius ir juos testuoti.
Taip pat buvo peržiūrėti Railties generatorių sugeneruoti rodiniai:
- Rodiniai dabar naudoja
div
žymes, o nep
žymes. - Sugeneruoti pastoliai dabar naudoja
_form
dalinius, o ne dubliuotą kodą redagavimo ir naujų rodinių. - Pastoliai formos dabar naudoja
f.submit
, kuris grąžina "Create ModelName" arba "Update ModelName", priklausomai nuo perduoto objekto būsenos.
Galiausiai keletas patobulinimų buvo pridėta prie rake užduočių:
- Pridėtas
rake db:forward
, leidžiantis atlikti migracijas atskirai arba grupėmis. - Pridėtas
rake routes CONTROLLER=x
, leidžiantis peržiūrėti maršrutus tik vienam valdikliui.
Railties dabar pasenusios:
RAILS_ROOT
vietojRails.root
,RAILS_ENV
vietojRails.env
, irRAILS_DEFAULT_LOGGER
vietojRails.logger
.
PLUGIN/rails/tasks
ir PLUGIN/tasks
daugiau neįkeliami, visos užduotys dabar turi būti PLUGIN/lib/tasks
.
Daugiau informacijos:
7 Veiksmų paketas
Veiksmų pakete buvo įvykdyti svarbūs vidiniai ir išoriniai pokyčiai.
7.1 Abstraktusis valdiklis
Abstraktusis valdiklis išskiria bendrus Action Controller dalis į perpanaudojamą modulį, kurį gali naudoti bet kokia biblioteka šablonų atvaizdavimui, dalinių atvaizdavimui, pagalbininkams, vertimams, žurnalavimui, bet kuriai užklausos ir atsakymo ciklo daliai. Šis abstraktumas leido ActionMailer::Base
dabar tiesiog paveldėti iš AbstractController
ir tiesiog apgaubti Rails DSL ant Mail gem.
Tai taip pat suteikė galimybę išvalyti Action Controller, išskirdami tai, kas galėjo supaprastinti kodą.
Tačiau reikia pažymėti, kad Abstraktusis valdiklis nėra vartotojui skirtas API, jūs jo nepasieksite savo kasdieninio Rails naudojimo metu.
Daugiau informacijos: - Rails Edge architektūra
7.2 Action Controller
application_controller.rb
dabar pagal nutylėjimą turi įjungtąprotect_from_forgery
.cookie_verifier_secret
buvo pasenusi ir dabar vietoj to ji priskiriama perRails.application.config.cookie_secret
ir perkeliama į atskirą failą:config/initializers/cookie_verification_secret.rb
.session_store
buvo konfigūruojamasActionController::Base.session
, o dabar jis perkeltas įRails.application.config.session_store
. Numatytieji parametrai nustatomiconfig/initializers/session_store.rb
.cookies.secure
leidžia nustatyti užšifruotas reikšmes slapukuose sucookie.secure[:key] => value
.cookies.permanent
leidžia nustatyti nuolatines reikšmes slapukų maišecookie.permanent[:key] => value
, kurios kelia išimtis, jei patikrinimo klaidos pasirašytose reikšmėse.- Dabar galite perduoti
:notice => 'Tai yra žinutė'
arba:alert => 'Kažkas nutiko negerai'
įformat
iškvietimąrespond_to
bloke.flash[]
maišas vis dar veikia kaip anksčiau. - Jūsų valdikliams dabar pridėtas
respond_with
metodas, supaprastinantis senąjįformat
bloką. Pridėtas
ActionController::Responder
, leidžiantis jums lankstumą, kaip generuojami jūsų atsakymai. Nebenaudojami:filter_parameter_logging
yra nebenaudojamas, vietoje jo naudokiteconfig.filter_parameters << :password
.
Daugiau informacijos:
7.3 Veiksmo išsiuntimas
Veiksmo išsiuntimas yra naujas „Rails 3.0“ ir suteikia naują, švaresnę maršrutizavimo įgyvendinimą.
- Didelis maršrutizatoriaus valymas ir perirašymas, „Rails“ maršrutizatorius dabar yra „rack_mount“ su „Rails DSL“ viršuje, tai yra atskiras programinės įrangos gabalas.
Kiekvienos aplikacijos apibrėžti maršrutai dabar yra pavadinimo erdvėje jūsų „Application“ modulyje, tai yra:
# Vietoje: ActionController::Routing::Routes.draw do |map| map.resources :posts end # Darykite: AppName::Application.routes do resources :posts end
Pridėta
match
metodas maršrutizatoriui, taip pat galite perduoti bet kurį „Rack“ programą prie atitinkamo maršruto.Pridėtas
constraints
metodas maršrutizatoriui, leidžiantis apsaugoti maršrutus su apibrėžtomis apribojimais.Pridėtas
scope
metodas maršrutizatoriui, leidžiantis priskirti maršrutus skirtingoms kalboms ar skirtingiems veiksmams, pavyzdžiui:scope 'es' do resources :projects, :path_names => { :edit => 'cambiar' }, :path => 'proyecto' end # Suteikia jums redagavimo veiksmą su /es/proyecto/1/cambiar
Pridėtas
root
metodas maršrutizatoriui kaip trumpinysmatch '/', :to => path
.Galite perduoti pasirinktinius segmentus į atitikmenį, pavyzdžiui
match "/:controller(/:action(/:id))(.:format)"
, kiekvienas skliaustelis segmentas yra pasirenkamas.Maršrutai gali būti išreikšti per blokus, pavyzdžiui galite iškviesti
controller :home { match '/:action' }
.
Pastaba. Senojo stiliaus „map“ komandos vis dar veikia kaip anksčiau su atgalinio suderinamumo sluoksniu, tačiau tai bus pašalinta 3.1 versijoje.
Nebenaudojami
- Visiems ne-REST aplikacijų „catch all“ maršrutams (
/:controller/:action/:id
) dabar yra užkomentuoti. - Maršrutai
:path_prefix
daugiau neegzistuoja, o:name_prefix
dabar automatiškai prideda "_" pabaigoje esančią reikšmę.
Daugiau informacijos: * „Rails 3“ maršrutizatorius: „Rack it Up“ * Peržiūrėti maršrutus „Rails 3“ * Bendriniai veiksmai „Rails 3“
7.4 Veiksmo rodinys
7.4.1 Neintruzinis „JavaScript“
Veiksmo rodinio pagalbininkuose buvo atliktas didelis perirašymas, įgyvendinant neintruzinį „JavaScript“ (UJS) kodus ir pašalinant senus vidinius AJAX komandų kodų fragmentus. Tai leidžia „Rails“ naudoti bet kurį suderinamą UJS tvarkytuvą, kad įgyvendintų UJS kodus pagalbininkuose.
Tai reiškia, kad visi ankstesni remote_<method>
pagalbininkai buvo pašalinti iš „Rails“ branduolio ir perkelti į Prototype Legacy Helper. Norėdami gauti UJS kodus į savo HTML, dabar perduodate :remote => true
. Pavyzdžiui:
form_for @post, :remote => true
Sukuria:
<form action="http://host.com" id="create-post" method="post" data-remote="true">
7.4.2 Pagalbininkai su blokais
Pagalbininkai, pvz., form_for
ar div_for
, kurie įterpia turinį iš bloko, dabar naudoja <%=
:
<%= form_for @post do |f| %>
...
<% end %>
Jūsų patys pagalbininkai tokiu būdu turi grąžinti eilutę, o ne papildyti išvesties buferį rankomis.
Pagalbininkai, kurie daro kažką kita, pvz., cache
ar content_for
, nėra paveikti šiuo pakeitimu, jiems vis dar reikalingas <%
kaip anksčiau.
7.4.3 Kiti pakeitimai
- Jums nebeprireiks iškviesti
h(string)
norint išvengti HTML išvesties pabėgimo, tai dabar įjungta pagal numatytuosius nustatymus visuose rodinio šablonuose. Jei norite neapdoroto eilutės, iškvieskiteraw(string)
. - Pagalbininkai dabar pagal numatytuosius nustatymus išveda HTML5.
- Formos žymos pagalbininkas dabar ištraukia reikšmes iš I18n su viena reikšme, todėl
f.label :name
ištrauks:name
vertimą. - I18n pasirinkimo žyma dabar turėtų būti :en.helpers.select, o ne :en.support.select.
- Jums nebeprireiks įdėti minuso ženklo į Ruby interpoliacijos pabaigą ERB šablone, norint pašalinti HTML išvestyje esančią paskutinę kėlimo į naują eilutę simbolį.
- Pridėtas
grouped_collection_select
pagalbininkas veiksmo rodinyje. - Pridėtas
content_for?
, leidžiantis patikrinti, ar rodinyje yra turinio prieš atvaizduojant. - perduodant
:value => nil
formos pagalbininkams, laukovalue
atributas bus nustatytas įnil
, o ne naudojant numatytąją reikšmę - perduodant
:id => nil
formos pagalbininkams, šie laukai bus atvaizduojami beid
atributo - perduodant
:alt => nil
image_tag
,img
žymė bus atvaizduojama bealt
atributo
8 Aktyvus modelis
Aktyvus modelis yra naujas „Rails 3.0“. Jis suteikia abstrakcijos lygmenį bet kokioms ORM bibliotekoms naudoti sąveikai su „Rails“, įgyvendinant aktyvaus modelio sąsają.
8.1 ORM Abstrakcija ir Action Pack sąsaja
Viena iš pagrindinių komponentų atjungimo buvo visų ryšių su Active Record ištraukimas iš Action Pack. Tai dabar yra baigta. Visi nauji ORM įskiepiai dabar tiesiog turi įgyvendinti Active Model sąsajas, kad veiktų sklandžiai su Action Pack.
Daugiau informacijos: - Padarykite bet kurį Ruby objektą jaustis kaip ActiveRecord
8.2 Validacijos
Validacijos buvo perkeltos iš Active Record į Active Model, suteikiant sąsają validacijoms, kurios veikia visose ORM bibliotekose „Rails 3“.
- Dabar yra
validates :attribute, options_hash
trumpinys, leidžiantis perduoti parinktis visoms validates klasės metodams, galite perduoti daugiau nei vieną parinktį validacijos metode. validates
metodas turi šias parinktis::acceptance => Boolean
.:confirmation => Boolean
.:exclusion => { :in => Enumerable }
.:inclusion => { :in => Enumerable }
.:format => { :with => Regexp, :on => :create }
.:length => { :maximum => Fixnum }
.:numericality => Boolean
.:presence => Boolean
.:uniqueness => Boolean
.
PASTABA: Visi „Rails“ versijos 2.3 stiliaus validacijos metodai vis dar palaikomi „Rails 3.0“, naujas validates metodas yra skirtas papildomai padėti jūsų modelio validacijoms, o ne pakeisti esamą API.
Taip pat galite perduoti validavimo objektą, kurį tada galite pernaudoti tarp objektų, kurie naudoja Active Model:
class TitleValidator < ActiveModel::EachValidator
Titles = ['Mr.', 'Mrs.', 'Dr.']
def validate_each(record, attribute, value)
unless Titles.include?(value)
record.errors[attribute] << 'turi būti galiojantis pavadinimas'
end
end
end
class Person
include ActiveModel::Validations
attr_accessor :title
validates :title, :presence => true, :title => true
end
# Arba Active Record
class Person < ActiveRecord::Base
validates :title, :presence => true, :title => true
end
Taip pat yra palaikymas introspekcijai:
User.validators
User.validators_on(:login)
Daugiau informacijos:
9 Active Record
Active Record gavo daug dėmesio „Rails 3.0“, įskaitant abstrakciją į Active Model, visišką užklausos sąsajos atnaujinimą naudojant Arel, validacijos atnaujinimus ir daugybę patobulinimų ir pataisymų. Visas „Rails“ 2.x API bus naudojamas per suderinamumo sluoksnį, kuris bus palaikomas iki 3.1 versijos.
9.1 Užklausos sąsaja
Active Record, naudodamas Arel, dabar grąžina ryšius savo pagrindiniais metodais. Esamas „Rails 2.3.x“ API vis dar palaikomas ir nebus pasenus iki „Rails 3.1“ ir nebus pašalintas iki „Rails 3.2“, tačiau naujame API pateikiamos šios naujos sąsajos, kurios visos grąžina ryšius, leidžiant juos sujungti:
where
- nurodo sąlygas ryšiui, kuris grąžinamas.select
- pasirinkite, kokius modelių atributus norite gauti iš duomenų bazės.group
- grupuoja ryšį pagal pateiktą atributą.having
- nurodo išraišką, apribojančią grupės ryšius (GROUP BY sąlyga).joins
- sujungia ryšį su kita lentele.clause
- nurodo išraišką, apribojančią sujungimo ryšius (JOIN sąlyga).includes
- įtraukia kitus iš anksto įkeltus ryšius.order
- rūšiuoja ryšį pagal pateiktą išraišką.limit
- apriboja ryšį iki nurodyto įrašų skaičiaus.lock
- užrakina iš duomenų bazės grąžinamus įrašus.readonly
- grąžina duomenų kopiją, skirtą tik skaitymui.from
- suteikia galimybę pasirinkti ryšius iš daugiau nei vienos lentelės.scope
- (ankstesnisnamed_scope
) grąžina ryšius ir gali būti sujungtas su kitais ryšių metodais.with_scope
- irwith_exclusive_scope
dabar taip pat grąžina ryšius ir gali būti sujungti.default_scope
- taip pat veikia su ryšiais.
Daugiau informacijos:
9.2 Patobulinimai
- Pridėtas
:destroyed?
prie Active Record objektų. - Pridėtas
:inverse_of
prie Active Record asociacijų, leidžiantis gauti jau įkeltos asociacijos egzempliorių, nesinaudojant duomenų baze.
9.3 Pataisos ir pasenusios funkcijos
Be to, daug pataisymų buvo atlikti Active Record šakoje:
- Palaikomas SQLite 2 palaikymas buvo pakeistas į SQLite 3.
- MySQL palaikymas stulpelių tvarkai.
- PostgreSQL adapteris buvo ištaisytas, kad nebūtų įterpiami neteisingi
TIME ZONE
reikšmės. - Palaikomi keli schemų pavadinimai „PostgreSQL“ lentelėse.
- „PostgreSQL“ palaikymas XML duomenų tipo stulpeliui.
table_name
dabar yra talpinamas kešo atmintyje.Taip pat buvo atlikta daug darbo su „Oracle“ adapteriu, įskaitant daugybę klaidų taisymų. Taip pat yra šie pasenusių funkcijų:
named_scope
klasėje Active Record yra pasenusi ir pervadinta įscope
.scope
metodams turėtumėte naudoti ryšio metodus, o ne:conditions => {}
paieškos metodą, pavyzdžiuiscope :since, lambda {|time| where("created_at > ?", time) }
.save(false)
yra pasenusi, naudokitesave(:validate => false)
.Active Record klaidų pranešimai turi būti pakeisti iš :en.activerecord.errors.template į
:en.errors.template
.model.errors.on
yra pasenusi, naudokitemodel.errors[]
validates_presence_of => validates... :presence => true
ActiveRecord::Base.colorize_logging
irconfig.active_record.colorize_logging
yra pasenusi, naudokiteRails::LogSubscriber.colorize_logging
arbaconfig.colorize_logging
PASTABA: Nors būsenos mašinos įgyvendinimas buvo įtrauktas į Active Record edge jau kelis mėnesius, jis buvo pašalintas iš Rails 3.0 versijos.
10 Active Resource
Active Resource taip pat buvo išskirtas į Active Model, leidžiantis naudoti Active Resource objektus su Action Pack be jokių problemų.
- Pridėtos validacijos per Active Model.
- Pridėtos stebėjimo kablys.
- HTTP įgaliotinės palaikymas.
- Pridėta palaikymas skaidraus autentifikavimo.
- Modelio pavadinimas perkeltas į Active Model.
- Active Resource atributai pakeisti į Hash su abipuse prieiga.
- Pridėti
first
,last
irall
sinonimai ekvivalentiškiems paieškos apribojimams. find_every
dabar nebegrąžinaResourceNotFound
klaidos, jei nieko nerasta.- Pridėtas
save!
, kuris iškeliaResourceInvalid
klaidą, jei objektas nėravalid?
. - Pridėti
update_attribute
irupdate_attributes
Active Resource modeliams. - Pridėtas
exists?
. - Pervadintas
SchemaDefinition
įSchema
irdefine_schema
įschema
. - Naudokite Active Resources
formatą
vietoje nuotolinės klaidoscontent-type
. - Naudokite
instance_eval
schemos blokui. - Taisyti
ActiveResource::ConnectionError#to_s
, kai@response
neatsako į #code arba #message, tvarko Ruby 1.9 suderinamumą. - Pridėta palaikymas klaidoms JSON formatu.
- Užtikrinti, kad
load
veiktų su skaitiniais masyvais. - Pripažįsta 410 atsakymą iš nuotolinio resurso kaip ištrintą resursą.
- Pridėta galimybė nustatyti SSL parinktis Active Resource ryšiams.
- Nustatant ryšio laiko limitą, taip pat veikia
Net::HTTP
open_timeout
.
Pasenusių funkcijų:
save(false)
yra pasenusi, naudokitesave(:validate => false)
.- Ruby 1.9.2:
URI.parse
ir.decode
yra pasenusios ir nebebus naudojamos bibliotekoje.
11 Active Support
Buvo atliktas didelis darbas Active Support, kad jis būtų lengvai pasirenkamas, tai yra, jums nebūtina reikalauti visos Active Support bibliotekos, kad gautumėte jos dalis. Tai leidžia įvairioms pagrindinėms Rails komponentams veikti lengviau.
Štai pagrindiniai pokyčiai Active Support:
- Didelis bibliotekos valymas, pašalinant nenaudojamus metodus.
- Active Support daugiau nebeprideda TZInfo, Memcache Client ir Builder bibliotekų. Jos visos įtrauktos kaip priklausomybės ir įdiegiamos naudojant
bundle install
komandą. - Saugūs buferiai įgyvendinti
ActiveSupport::SafeBuffer
. - Pridėti
Array.uniq_by
irArray.uniq_by!
. - Pašalintas
Array#rand
ir atgalinėArray#sample
iš Ruby 1.9. - Taisytas klaidos
TimeZone.seconds_to_utc_offset
grąžinant neteisingą reikšmę. - Pridėtas
ActiveSupport::Notifications
middleware. ActiveSupport.use_standard_json_time_format
dabar pagal nutylėjimą yra true.ActiveSupport.escape_html_entities_in_json
dabar pagal nutylėjimą yra false.Integer#multiple_of?
priima nulį kaip argumentą, jei priėmėjas yra nulis, grąžina false.string.chars
pervadintas įstring.mb_chars
.ActiveSupport::OrderedHash
dabar gali būti deserializuojamas per YAML.- Pridėtas SAX-based parseris XmlMini, naudojant LibXML ir Nokogiri.
- Pridėtas
Object#presence
, kuris grąžina objektą, jei jis yra#present?
, kitu atveju grąžinanil
. - Pridėtas
String#exclude?
pagrindinis išplėtimas, kuris grąžina priešingybę#include?
. - Pridėtas
to_i
DateTime
klaseiActiveSupport
, kadto_yaml
teisingai veiktų modeliams suDateTime
atributais. - Pridėtas
Enumerable#exclude?
, kad būtų galima lyginti suEnumerable#include?
ir išvengti!x.include?
. - Perjungti į numatytąjį XSS apsaugos režimą „rails“.
- Palaikoma giluminė sujungimo funkcija
ActiveSupport::HashWithIndifferentAccess
. Enumerable#sum
dabar veikia su visais numeruojamaisiais, net jei jie nereaguoja į:size
.inspect
nulio ilgio trukme grąžina „0 sekundės“, o ne tuščią eilutę.- Pridėti
element
ircollection
įModelName
. String#to_time
irString#to_datetime
tvarko trupmenines sekundes.- Pridėta palaikymas naujiems aplinkos filtrų objektams, kurie atsako į
:before
ir:after
, naudojami prieš ir po kablys. ActiveSupport::OrderedHash#to_a
metodas grąžina surikiuotą masyvų rinkinį. Atitinka Ruby 1.9Hash#to_a
.MissingSourceFile
egzistuoja kaip konstanta, bet dabar ji lygiLoadError
.- Pridėtas
Class#class_attribute
, kad būtų galima deklaruoti klasės lygio atributą, kurio reikšmė yra paveldima ir perrašoma po klasėmis. - Galiausiai pašalintas
DeprecatedCallbacks
išActiveRecord::Associations
. Object#metaclass
dabar yraKernel#singleton_class
, kad atitiktų Ruby. Šie metodai buvo pašalinti, nes jie dabar yra prieinami Ruby 1.8.7 ir 1.9 versijose.Integer#even?
irInteger#odd?
String#each_char
String#start_with?
irString#end_with?
(3-as asmuo lieka)String#bytesize
Object#tap
Symbol#to_proc
Object#instance_variable_defined?
Enumerable#none?
Saugumo patikrinimas REXML lieka Active Support, nes ankstyvosios Ruby 1.8.7 versijos vis dar jo reikalauja. Active Support žino, ar jį reikia taikyti ar ne.
Šie metodai buvo pašalinti, nes jie daugiau nenaudojami karkase:
Kernel#daemonize
Object#remove_subclasses_of
Object#extend_with_included_modules_from
,Object#extended_by
Class#remove_class
Regexp#number_of_captures
,Regexp.unoptionalize
,Regexp.optionalize
,Regexp#number_of_captures
12 Action Mailer
Action Mailer gavo naują API, kur TMail buvo pakeistas nauju Mail elektroninės pašto biblioteka. Pati Action Mailer buvo beveik visiškai perrašyta, kuriai buvo pakeista praktiškai kiekviena eilutė kodo. Rezultatas yra tas, kad Action Mailer dabar tiesiog paveldi iš Abstract Controller ir apgaubia Mail biblioteką Rails DSL. Tai žymiai sumažina kodo kiekį ir kitų bibliotekų dubliavimą Action Mailer.
- Visi pašto siuntėjai dabar pagal nutylėjimą yra
app/mailers
aplankale. - Dabar galima siųsti el. laiškus naudojant naują API su trimis metodais:
attachments
,headers
irmail
. - Action Mailer dabar natūraliai palaiko vidinius priedus naudodama
attachments.inline
metodą. - Action Mailer el. laiškų metodai dabar grąžina
Mail::Message
objektus, kurie gali būti išsiųsti naudojantdeliver
pranešimą. - Visi pristatymo metodai dabar yra abstrahuoti į Mail biblioteką.
- Pašto pristatymo metodas gali priimti raktų ir reikšmių porų hainą, kurie yra visiškai galiojantys pašto antraštės laukams.
mail
pristatymo metodas veikia panašiai kaip Action Controllerrespond_to
, ir galite aiškiai arba neaiškiai atvaizduoti šablonus. Action Mailer pagal poreikį pavers el. laišką daugialypiu laišku.- Galite perduoti proc į
format.mime_type
kvietimus laiško bloke ir aiškiai atvaizduoti tam tikrus teksto tipus, arba pridėti išdėstymus ar skirtingus šablonus.render
kvietimas proc viduje yra iš Abstract Controller ir palaiko tas pačias parinktis. - Tai, kas buvo pašto siuntėjo vienetų testai, buvo perkelti į funkcinius testus.
- Action Mailer dabar visą automatinį antraščių laukų ir kūnų kodavimą perduoda Mail bibliotekai.
- Action Mailer automatiškai koduoja el. laiškų kūnus ir antraštes už jus
Nebenaudojami:
:charset
,:content_type
,:mime_version
,:implicit_parts_order
yra visi pasenusiųActionMailer.default :key => value
stiliaus deklaracijų naudojimo vietose.- Mailer dinaminiai
create_method_name
irdeliver_method_name
yra pasenusi, tiesiog iškvieskitemethod_name
, kuris dabar grąžinaMail::Message
objektą. ActionMailer.deliver(message)
yra pasenusi, tiesiog iškvieskitemessage.deliver
.template_root
yra pasenusi, perduokite parinktis įrender
kvietimą proc viduje išformat.mime_type
metodo laiško generavimo bloke.body
metodas, skirtas apibrėžti objekto kūno kintamuosius, yra pasenusi (body {:ivar => value}
), tiesiog deklaruokite objekto kintamuosius tiesiogiai metode ir jie bus prieinami šablone.- Siuntėjai esantys
app/models
aplankale yra pasenusi, naudokiteapp/mailers
aplankalą.
Daugiau informacijos:
13 Autoriai
Žr. visą sąrašą Rails prisidėjusių asmenų, kurie daugybę valandų skyrė Rails 3 kūrimui. Kudos visiems jiems.
Rails 3.0 išleidimo pastabas sudarė Mikel Lindsaar.
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.