Ciao,
e’ possibile in Rails ridefinire il tipo (la classe) di un attributo di
un modello (ActiveRecord).
Mi spiego: il mio modello ha l’attributo color_code che è di classe
stringa (colore rgb, 6 caratteri), ma vorrei fare in modo che venga
“castato” a una classe definita da me, esempio Colore, in modo che alle
sue istanze possa applicare il metodo “schiarisci”.
Ciao,
e’ possibile in Rails ridefinire il tipo (la classe) di un attributo di
un modello (ActiveRecord).
Mi spiego: il mio modello ha l’attributo color_code che è di classe
stringa (colore rgb, 6 caratteri), ma vorrei fare in modo che venga
“castato” a una classe definita da me, esempio Colore, in modo che alle
sue istanze possa applicare il metodo “schiarisci”.
Io sovrascriverei il metodo color_code:
class Something < ActiveRecord::Base
def color_code
Colore.new(read_attribute(:color_code))
end
end
Ciao,
e’ possibile in Rails ridefinire il tipo (la classe) di un attributo di
un modello (ActiveRecord).
Ciao,
di questi tempi conviene specificare sempre: Rails 2.3 o Rails 3?
Un modo per fare esattamente quello che chiedi è ridefinire i metodi
read_attribute [1] e write_attribute [2] con qualcosa tipo:
def read_attribute(attr_name)
if attr_name == :color_code
return Color.new(color_code)
else
super
end
end
e qualcosa di analogo per write_attribute.
[1]
[2]
Io tuttavia te lo sconsiglio, mi sembra più sicuro e semplice definire
dei metodi con nomi diversi dall’attributo (ad esempio color), e poi
usare sempre quei metodi nel resto del codice; qualcosa tipo:
class SomeModel < ActiveRecord::Base
def color
color_code && Color.new(color_code)
end
def color=(some_color)
case some_color
when String
self.color_code = some_color
when Color
self.color_code = some_color.code
when nil
self.color_code = nil
else
raise ArgumentError.new(‘some appropriate message’)
end
end
end
pietro
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.