Ruby: salvare un oggetto senza validazione

Posted by Dibi Store Mon, 15 Oct 2007 06:01:00 GMT

Premetto che questa tecnica funziona sia con ruby, sia con rails.

Talvolta capita che abbiamo bisogno di salvare un oggetto senza passare le validazioni. n questo caso ci basterà passare false come parametro di save, e il gioco è fatto!

@user.save(false)

Posted in  | Tags ,  | no comments

Capire l'ordine di caricamento dei metodi nei moduli in Ruby

Posted by Dibi Store Fri, 05 Oct 2007 09:59:00 GMT

Per evitare errori di difficile individuazione, è bene capire come avvengono i principali meccanismi di caricamento. Oggi illustrerò in che ordine avviene il caricamento dei metodi nei moduli in Ruby, in particolare quando vengono definiti più di una volta.

Come primo esempio un semplice listato, per capire soprattutto di cosa sto parlando:

module Modulo
  def test
    puts "Primo metodo del modulo Modulo"
  end

  def test
    puts "Secondo metodo del modulo Modulo"
  end  
end

class Classe
  include Modulo
  a = Classe.new
  a.test
end

Cosa vi aspettate di ricevere come output? Bhe ovviamente possiamo solo provarlo, vi anticipo però che i moduli vengono caricati nell'ordine First in - last Out, ossia il primo ad essere caricato è l'ultimo ad essere eseguito. In sostanza avremo un output come il seguente:

  Secondo metodo del modulo Modulo

In pratica questo è vero anche se i metodi si trovano in moduli diversi:

module Modulo
  def test
    puts "Primo metodo del modulo Modulo"
  end

  def test
    puts "Secondo metodo del modulo Modulo"
  end  
end

module Modulo2
  def test
    puts "Primo metodo del modulo Modulo2"
  end

  def test
    puts "Secondo metodo del modulo Modulo2"
  end  
end

class Classe
  include Modulo
  include Modulo2
  a = Classe.new
  a.test
end

Che in questo caso ritorna l'ultima stringa. Consiglio se non è chiaro di effettuare numerosi esempi, ma non abusate di questa tecnica, perchè eventuali errori saranno di difficile individuazione, oltre che a rendere il codice poco leggibile

Posted in  | no comments

Ricaricare completamente una pagina con javascript

Posted by Dibi Store Fri, 05 Oct 2007 08:34:00 GMT

Talvolta per necessità abbiamo bisogno di ricaricare completamente una pagina, e magari ricaricando completamente la cache... La soluzione ovviamente c'è ed è semplicissima, ecco il codice:

window.location.reload(true);

Semplice no?

Posted in  | no comments

Sitepoint vi regala un intero libro su Ruby On Rails

Posted by Dibi Store Tue, 02 Oct 2007 16:36:00 GMT

Si è proprio vero, Sitepoint vi regala per un tempo limitato (60 giorni) la versione in pdf del suo libro di Ruby on Rails. qui trovate la pagina di download.

Sembra strano, ma secondo me lo fanno perchè con la nuova versione di rails 2.0, il libro diventerà obsoleto, e probabilmente lo rimpiazzeranno con un altro! Comunque se gia non lo avevate, scaricatelo perchè è fatto molto bene!

Posted in  | no comments

Logger in ruby on rails

Posted by Dibi Store Sun, 30 Sep 2007 19:35:00 GMT

In ruby on rails, è possibile configurare dei logger, che ci possono aiutare in molte situazioni. Un esempio chiarirà meglio il concetto:

def save
  ..
  user.save  
  rescue ActiveRecord::RecordInvalid
  logger.warn "L'utente ha fatto qualcosa che non sarebbe dovuta succedere"
end

Impostare i logger è veramente semplice, ed il risultato si potrà vedere nel log dell'applicazione, per esempio in /log/development.log, oppure direttamente nella finestra del server. Di seguito elenco i possibili stati che si possono assegnare al logger, dal meno grave, al piu grave:

  • debug
  • info
  • warn
  • error
  • fatal

Posted in  | Tags  | no comments

Usare rails in versione EdgeRails

Posted by Dibi Store Sun, 30 Sep 2007 16:38:00 GMT

Come ogni framework, anche rails dispone di una versione di sviluppo, che viene comunemente chiamata EdgeRails.

Questa versione è destinata agli utenti che vogliono provare le nuove features del framework e giovare dei (auguro sempre non numerosi) bug fixes.
Come viene descritto nel link sopra, il metodo più semplice per usare EdgeRails, è quello di digitare da console, ipotizzando di essere nella root dell'applicazione:

rake rails:freeze:edge
Read more...

Posted in  | Tags  | no comments

Filtrare i dati di log nelle applicazioni Ruby on Rails

Posted by Dibi Store Sat, 29 Sep 2007 11:22:00 GMT

Quando creiamo meccanismi di autenticazione è buona norma salvare le password in hash, per limitare le possibilità che qualcuno possa decifrarle.

Limitarsi a questa precauzione però, non è sufficente. Infatti i parametri inviati in una richiesta, vengono comunque salvati nei file di log dell'applicazione, per fare una prova vi basterà effettuare qualche prova osservando i log del server, in questo caso mongrel.
Supponiamo di aver inviato una richiesta di login:

Processing SessionController#create (for 127.0.0.1 at 2007-09-29 13:17:46) [POST
]
  Session ID: acfffc404b5073973612806ef118bbda
  Parameters: {"commit"=>"invia", "action"=>"create", "controller"=>"session", "
login"=>"Oscar", "password"=>"secret"}

Read more...

Posted in  | Tags  | no comments

Template RJS, differenza tra replace e replace_html

Posted by Dibi Store Fri, 28 Sep 2007 08:59:00 GMT

Inizio oggi una nuova serie di articoli che si baseranno sui template RJS.
Questi particolari template, vengono usati spesso in ruby on rails, e quando vengono richiamati, restituiscono automaticamente un content-type uguale a text/javascript. Sono quindi l'ideale nelle nostre pagine dinamiche che usano Ajax.

Il vantaggio di questi template, è che possiamo aggiornare più elementi nella stessa pagina con un unica chiamata, di seguito illustro un esempio, per capire meglio il concetto. Notate che non serve specificare l'azione nel controller, in quanto rails è ebbastanza intelligente da capire di richiamare il file.

Read more...

Posted in  | Tags  | no comments

Manipolare le date in php con mktime() e date()

Posted by Dibi Store Wed, 26 Sep 2007 07:26:00 GMT

Talvolta abbiamo bisogno di effettuare delle operazioni sulle date con php, ad esempio vogliamo aggiungere o togliere un giorno ad una determinata data, aggiungere una settimana alla data attuale, eccetera.

Per fare questo tipo di operazioni, useremo le due funzioni date() e mktime() di php. La prima permette di creare una data nel formato scelto (si veda la documentazione di date()), mentre la seconda ci permette di creare il suo timestamp, ovvero il numero di secondi dal primo gennaio 1970.

Read more...

Posted in  | Tags ,  | no comments

Creare un array dinamico con ruby

Posted by Dibi Store Mon, 24 Sep 2007 20:48:00 GMT

Oggi ho avuto un problema nel generare un array nel seguente formato:

[1, 'uno'],[2, 'due']

Il problema è banale e chiunque abbia un minimo di esperienza con gli array non avra problemi, io però non ci sono arrivato subito, e ho trovato aiuto nel canale #rub-lang nella rete azzurra-irc.
In pratica, supponendo che stiate lavorando in rails, ma anche in puro codice ruby è uguale, potete scrivere:

@array = Model.find(:all).collect { |s| "[#{s.id}, '#{s.name}']"}.join(',')

E il risultato è garantito! Prendeteci pure spunto per problemi simili nel generare array.

Posted in  | Tags ,  | no comments

Older posts: 1 ... 4 5 6 7 8 9