juba
1
Bonjour,
J’ai une propriété d’un modèle que j’ai serialisé en déclarant :
class UserNetwork
serialize :report
end
et j’ai un autre modèle :
class Report
attr_reader :email
end
tout se passe bien lorsque j’enregistre mon objet report en base (il est
bien YAML), mais lorsque je le récupère, j’ai quelquechose d’étrange :
pp @report
pp “#{@report}”
pp @report.class
pp @report.email
donne
#<Report:0xb68fad84
@class=“Report”,
@ivars=
{“email”=> “[email protected]”
}>
“#YAML::Object:0xb68fad84”
“Report”
undefined method `email’ for #YAML::Object:0xb68fad84"
…
Quelqu’un aurait une idée ?
Merci d’avance,
Julien
juba
2
problème réglé, j’avais oublié de mettre dans le controlleur qui faisait
les affichages :
model :report
du coup, il ne trouvait pas la définition de Report (modèle non hérité
de AR::B)…
juba
3
Salut,
Pourquoi utilise la sérialisation ?
Les objets sont sérialisé en YAML dans la base. ça me semble un peut
compliquer juste pour stocker un email. De plus il ne sera possible
d’exploiter cette information simplement en dehors de RoR
En supposant que l’objet Report ne possède qu’un attribut email, le plus
simple est d’utiliser la composition ainsi :
class UserNetwork < ActiveRecord::Base
composed_of :report, :mapping => [[:report_email, :email ]]
end
class Report
attr_reader :email
def initialize(un_email)
@email = un_email
end
end
L’option mapping décris comment les attributs de l’objet composite
seront mappé dans la table user_networks
ici l’attribut “email” est stocké dans la colonne “report_email”
L’utilisation ne pose pas de problème
u = UserNetwork.create :report => Report.new(‘[email protected]’)
y u
j’espère que ça te sera utile
Mourad
Le jeudi 01 février 2007 à 18:23 +0100, Julien B. a écrit :
juba
4
Salut,
Merci pour ton conseil, mais mon modèle est plus complexe que cela. Il
encapsule un email mais également un tableau associatif. J’avais
réfléchi à la composition, mais il m’a paru plus simple et plus souple
d’utiliser la sérialisation.
Julien