1 votes

Clonage des attributs d'un objet vers un autre

J'ai deux modèles : Content et ContentType. Chaque contenu (classe et non objet) est associé à un type de contenu (ContentType). Le type de contenu contient essentiellement des attributs qui peuvent être définis à l'aide d'un formulaire en ligne, et qui peuvent ensuite être utilisés dans les vues pour afficher/masquer certains des attributs des objets de contenu.

Après avoir créé un nouvel objet Contenu (ex : @c = Content.new), je pouvais récupérer le ContentType associé en utilisant :

c def content_type @content_type ||= ContentType.find_by_name(self.class.to_s) end fin

Je pourrais alors interroger les attributs ContentType en utilisant @c.content_type.xxx mais existe-t-il un moyen d'accéder directement aux attributs ContentType comme s'ils étaient des attributs @c sans utiliser l'option method_missing. En fait, au lieu de faire @c.content_type.has_title ? je voudrais demander @c.has_title ? Existe-t-il un moyen de cloner les attributs ContentType sur @c ?

Merci d'avance.

1voto

nasmorn Points 1527

Vous pouvez utiliser la méthode de délégation

has_one :user
delegate :name, :name=, :email, :email=, :to => :user

C'est au moins un peu mieux, car le ContentType peut être masqué.

Vous pouvez également passer un :allow_nil => true qui vous évite les erreurs "Cant call nil.xxx" si le ContentType peut également être nil.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X