Rails 2: ActiveRecord
Inizio la mia avventura in rails con voi e vi presento quelle che man mano leggendo nei blog sono le nuove superfatures di Rails 2.0.
Prima cosa voglio dirvi che Rails 2 è veramente ma veramente migliorato, sembrava quasi non ce ne fosse bisogno, ma ora regna una pulizia sovrana, il codice è più snello e lineare e molte componenti sono state separate dal framework e distribuite come plugin/gem separate. Un esempio sono classic pagination e gli adapter oracle, mssql, proprio per garantire una migliore linea di sviluppo.
Ma ora veniamo al sodo... cosa è cambiato? Iniziamo da active record.
Validazione
Sono stati introdotti delle nuove opzioni per la validazione numerica:
validate_numericality_of :costo,
:greater_than => 1000
validate_numericality_of :costo,
:greater_than_or_equal_to => 1000
validate_numericality_of :costo,
:equal_to => 1000
validate_numericality_of :costo,
:less_than => 1000
validate_numericality_of :costo,
:less_than_or_equal_to => 1000
validate_numericality_of :costo,
:odd => true
validate_numericality_of :costo,
:even => true
:allow_blank
Qui mi hanno risolto un grosso dilemma infatti, nella precedente versione di rails c'era :allow_nil perché spesso dovevo valutare che in un text_field ci fosse un numero, ovviamente il text_field se non metto nulla non passa nil ma blank quindi per far si che il mio Model accettasse correttamente anche i campi vuoti dovevo fare:
validates_numericality_of :rating,
:if => Proc.new {|rating| not rating.blank? }
Grazie al cielo oggi Ruby 2.0.1 ci viene in contro con
validates_numericality_of :rating,
:allow_blank => true
Query Caching
Altra cosa super interessante è il query caching, ovvero, si poteva fare anche prima attraverso tips o plugin esterni (memcached) mentre ora tutto è integrato.
prima bisognava fare una cosa di questo tipo
@post ||= Post.find(:all)
Ora Rails 2 memorizza la nostra query ex: SELECT * FROM POSTS nella cache, se successivamente rifaccio quella query non verà più interrogato il db ma verrà subito mostrato il risultato, con conseguenza di un grande risparmio di tempo e risorse.
Comunque se per qualsivoglia motivo necessitate bypassare la cache potete fare:
@post = Post.force_find(:all)
Sexy Migration
Bellissime le adoro le nuove migration che prendono decisamente spunto dal famoso plugin di cui ne porta il nome, prima le tabelle si definivano cosi:
create_table :post do |t|
t.column :user_id, :integer
t.column :body, :text
t.column :created_at, :datetime
t.column :updated_at, :datetime
end
Mentre ora si definiscono cosi:
create_table :post do |t|
t.references :user,
## Oppure
t.belongs_to :user,
## Oppure
t.integer :user_id,
t.text :body
t.timestamps
end
Many To Many
Ora quando usiamo has_and_belongs_to_many conosciuto come habtm possiamo specifiare la join table, quindi mettiamo il caso che abbiamo una Casa che has_and_belongs_to_many stanze possiamo
has_and_belongs_to_many :stanze
:join_table => 'casa_stanze'
end
has_and_belongs_to_many :case
:join_table => 'casa_stanze'
end
L'esempio è un tantino forzato ma era solo per far intendere ciò che ci attende al Binario 2
Ci aggiorniamo prossimamente con i Controller e le View
Stay Tuned
Trackbacks
Utilizza il link seguente per fare trackback dal tuo sito
http://blog.lipsiasoft.com/trackbacks?article_id=rails-2-activerecord&day=11&month=12&year=2007
Commenti
Categories
- Altro (17)
- Comunicati Stampa (2)
- Fedora (1)
- Linux (17)
- Mac (45)
- Ruby (20)
- Ruby on Rails (39)
- Tutorials (20)
- Windows (13)
Archivi
- October 2008 (1)
- June 2008 (1)
- May 2008 (5)
- April 2008 (2)
- March 2008 (1)
- January 2008 (3)
- December 2007 (5)
- November 2007 (5)
- October 2007 (9)
- September 2007 (1)
WaYdotNET
Ora penso che ActiveRecord non ha nulla da invidiare ai famosi ORM tipo Hibernate.
io man mano che migro mi rendo conto che le cose che sono cambiate sono veramente molte, il caching ora è veramente fantastico e la velocità delle app è incrementata nettamente.
Anche nelle viste le cose sono cambiate e tanto, e il rendering delle partials cosi ad occhio mi sembra un filino più complesso se non totalmente diverso.
Ma comunque avremmo modo di approfondirlo meglio.