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


class Post < ActiveRecord::Base
  has_and_belongs_to_many :stanze
    :join_table => 'casa_stanze'
end
class Stanza < ActiveRecord::Base
  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

Questo post è stato inviato il December 11, 2007 00:54 e Posted in , . Puoi seguire tutte le risposte tramite il Atom feed. You can leave a comments, Or a trackback from your own site.
Tags ,


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

Lascia una risposta

  1. Carlo Bertini il December 11, 2007 00:54:
    E bravo il nostro Davide, ottima panoramica di alcune funziona principali di rails 2.0 ..... manca solo http loving ed avevi svelato quasi tutto... ora bando alle ciance e mettiamoci a studiare :D


    WaYdotNET
  2. Davide D'Agostino il December 11, 2007 00:54:
    Carletto, arriverà ho iniziato da ActiveRecord, man mano li affronteremo tutti
  3. Marco il December 11, 2007 00:54:
    Ancora non ho avuto tempo di passare a rails 2 ma la funzionalità che trovo più vantaggiosa e comoda è sicuramente la query caching.
    Ora penso che ActiveRecord non ha nulla da invidiare ai famosi ORM tipo Hibernate.
  4. Davide D'Agostino il December 11, 2007 00:54:
    @Marco,

    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.

Lascia un commento