Forum: Italian Ruby user group Salvare un metodo nel db

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
78050c0e315c1455715f06802f93f17a?d=identicon&s=25 Michele M. (michele_m)
on 2016-03-28 12:50
Salve a tutti,

sono un principiante, spero perdonerete se la mia domanda non
è posta nel modo corretto.

Non riesco a capire se è possibile salvare il risultato di un metodo
in una nuova colonna della rispettiva tabella.

es: def new_price
      new_price = self.price * self.terms / 100
    end

Grazie
Eff93e9bbe063b7136c9b6f218071a09?d=identicon&s=25 Marco Mastrodonato (marcomd)
on 2016-03-29 18:28
Ciao Michele,

dovresti specificare se stai usando rails e quale orm. Se sei un
principiante suppongo tu stia utilizzando rails + active record, in tal
caso devi prima aggiungere la colonna:

# crei la migrate (modifica al db)
rails g migration AddNewPriceToArticles new_price:decimal{7,2}

# applichi la migrate
rake db:migrate

ora puoi utilizzare il nuovo campo:

def calculate_new_price
  self.update_attributes new_price: self.price * self.terms / 100
end

Il tuo metodo che calcola il valore deve avere un nome differente dal
nome del campo altrimenti sovrascriveresti quello che rails crea in
automatico e quando lo utilizzi non riceveresti più il contenuto del db.

In pratica succederebbe questo:

class Pippo
  attr_accessor :nome

  # Stai forzando il metodo
  def nome
    'Test'
  end
end

p=Pippo.new
=> #<Pippo:0x79e02e8>

p.nome= 'Filippo'
=> "Filippo"

p.nome
=> "Test"
78050c0e315c1455715f06802f93f17a?d=identicon&s=25 Michele M. (michele_m)
on 2016-03-29 19:23
Ciao Marco,

si sto utilizzando rails + active record.

sei stato molto esaustivo, facevo tutto bene fino alla migrazione
ma sbagliavo col metodo pensavo bastasse solo dichiararlo,ma grazie a te
e alla lettura del codice ho capito cosa devo fare.
(perdona se non uso i termini giusti;-).

Grazie.
This topic is locked and can not be replied to.