Archivi categoria: Ruby

Rails 3, lo sapevi che…

…per limitare il numero di query durante l’esecuzione del comando each è possibile da prima filtrare i risultati, operando solamente sui dati che realmente servono?

clients = Client.limit(10)
clients.eachdo|client|
  puts client.address.postcode
end
il pezzo di code soprar riportasto può essere riscritto così:
clients = Client.includes(:address).limit(10)
 clients.each do |client|
  puts client.address.postcode
end
Questo perchè include ottimizza la query basandosi sui legami di appartenenza delle classi conivolte.
Grazie ad Active Record, è possibile recuperare questi dati dal db, semplicemente utilizzando la semantica che si può ricondurre al linguaggio SQL:
  • where
  • select
  • group
  • order
  • reorder
  • reverse_order
  • limit
  • offset
  • joins
  • includes
  • lock
  • readonly
  • from
  • having

Una cosa che ritengo davvero importante ed elegante e come gli sviluppatori siano riuciti a implementre queste query sql in rails, per esempio:

Client.where("orders_count = ?", params[:o rders])
stando bene attenti agli SQL Injections.
Ultima cosa interessante sono gli scope ovvero un modo utile e in pieno stile rails, cioè riusabile e super maneggevole, per creare della query. Il vantaggio? ogni volta che si richiamerà la funzione, non verrà eseguita la query fintantoché non verrà completata da un .all, .count, .each o .first, come riportato nell’esempio finale di questo sito.
Ulteriori approfondimenti e idee per migliorare il vostro stile di programmazione li trovate in Rails Guides oppure nel Railscast 202

Quante volte è stato condiviso il vostro link?

Me lo sono sentito dire molte volte, dovrei riuscire a capire quante volte un link è stato condiviso nei vari social, ogni volta ho risposto con un non lo so! Almeno fino a pochi giorni fa, quanto ho trovato questo stupendo progetto su github, share_counts, che permette di interrogare diversi social e fornire il numero di condivisioni in ognuno di questi dell’URL desiderata!

C’è da dire che GoogleBuzz non funziona più (cavolo, il progetto non è aggiornato da un anno e in questo periodo, google ha già cassato Buzz 🙂 ) per questo motivo sto pensando di implementare Google +, anche se però non funziona molto! Vediamo